diff options
author | Stan Shebs <shebs@codesourcery.com> | 1994-06-07 01:57:15 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 1994-06-07 01:57:15 +0000 |
commit | ef44eed173353ff002da6fe92680e40068cd081f (patch) | |
tree | beeeaecb50227b8c1fe964debaf3c8f45bc9ac9a | |
parent | 33268150cbbcc90ec13f5603d566537cf4cd569e (diff) | |
download | gdb-ef44eed173353ff002da6fe92680e40068cd081f.zip gdb-ef44eed173353ff002da6fe92680e40068cd081f.tar.gz gdb-ef44eed173353ff002da6fe92680e40068cd081f.tar.bz2 |
Reorganized GDB tests - base
57 files changed, 21351 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/.Sanitize b/gdb/testsuite/gdb.base/.Sanitize new file mode 100644 index 0000000..d0eedcb --- /dev/null +++ b/gdb/testsuite/gdb.base/.Sanitize @@ -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 diff --git a/gdb/testsuite/gdb.base/Makefile.in b/gdb/testsuite/gdb.base/Makefile.in new file mode 100644 index 0000000..e25db0d --- /dev/null +++ b/gdb/testsuite/gdb.base/Makefile.in @@ -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 + diff --git a/gdb/testsuite/gdb.base/README b/gdb/testsuite/gdb.base/README new file mode 100644 index 0000000..556fc75 --- /dev/null +++ b/gdb/testsuite/gdb.base/README @@ -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 diff --git a/gdb/testsuite/gdb.base/a1-selftest.exp b/gdb/testsuite/gdb.base/a1-selftest.exp new file mode 100644 index 0000000..af9d836 --- /dev/null +++ b/gdb/testsuite/gdb.base/a1-selftest.exp @@ -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" + } +} diff --git a/gdb/testsuite/gdb.base/bitfields.c b/gdb/testsuite/gdb.base/bitfields.c new file mode 100644 index 0000000..453bd3c --- /dev/null +++ b/gdb/testsuite/gdb.base/bitfields.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/bitfields.exp b/gdb/testsuite/gdb.base/bitfields.exp new file mode 100644 index 0000000..ab92fd1 --- /dev/null +++ b/gdb/testsuite/gdb.base/bitfields.exp @@ -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 +} diff --git a/gdb/testsuite/gdb.base/break.c b/gdb/testsuite/gdb.base/break.c new file mode 100644 index 0000000..2b36a52 --- /dev/null +++ b/gdb/testsuite/gdb.base/break.c @@ -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); +} + diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp new file mode 100644 index 0000000..4fa1457 --- /dev/null +++ b/gdb/testsuite/gdb.base/break.exp @@ -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 +} diff --git a/gdb/testsuite/gdb.base/callfuncs.c b/gdb/testsuite/gdb.base/callfuncs.c new file mode 100644 index 0000000..e59db08 --- /dev/null +++ b/gdb/testsuite/gdb.base/callfuncs.c @@ -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)); +} diff --git a/gdb/testsuite/gdb.base/configure.in b/gdb/testsuite/gdb.base/configure.in new file mode 100644 index 0000000..d55c708 --- /dev/null +++ b/gdb/testsuite/gdb.base/configure.in @@ -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: diff --git a/gdb/testsuite/gdb.base/coremaker.c b/gdb/testsuite/gdb.base/coremaker.c new file mode 100644 index 0000000..79418be --- /dev/null +++ b/gdb/testsuite/gdb.base/coremaker.c @@ -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 (); +} + diff --git a/gdb/testsuite/gdb.base/crossload.exp b/gdb/testsuite/gdb.base/crossload.exp new file mode 100644 index 0000000..9c41f8b --- /dev/null +++ b/gdb/testsuite/gdb.base/crossload.exp @@ -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" "" diff --git a/gdb/testsuite/gdb.base/echo.exp b/gdb/testsuite/gdb.base/echo.exp new file mode 100644 index 0000000..cfad3b0 --- /dev/null +++ b/gdb/testsuite/gdb.base/echo.exp @@ -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 diff --git a/gdb/testsuite/gdb.base/exprs.c b/gdb/testsuite/gdb.base/exprs.c new file mode 100644 index 0000000..bd33620 --- /dev/null +++ b/gdb/testsuite/gdb.base/exprs.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/exprs.exp b/gdb/testsuite/gdb.base/exprs.exp new file mode 100644 index 0000000..cf81939 --- /dev/null +++ b/gdb/testsuite/gdb.base/exprs.exp @@ -0,0 +1,2172 @@ +# 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 "exprs" + +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 + +# +# set it up at a breakpoint so we can play with the variable values +# + +if ![runto main] then { + perror "couldn't run to breakpoint" + continue +} + +# +# test expressions with "char" types +# +send "set variable v_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_char == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_char == 127\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print char ==" } + -re "$prompt $" { fail "print char ==" } + timeout { fail "(timeout) print char ==" } + } + } + -re "$prompt $" { fail "print char ==" } + timeout { fail "(timeout) print char ==" } + } + } + -re "$prompt $" { fail "print char ==" } + timeout { fail "(timeout) print char ==" } +} + + +send "set variable v_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_char != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_char != 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print char !=" } + -re "$prompt $" { fail "print char !=" } + timeout { fail "(timeout) print char !=" } + } + } + -re "$prompt $" { fail "print char !=" } + timeout { fail "(timeout) print char !=" } + } + } + -re "$prompt $" { fail "print char !=" } + timeout { fail "(timeout) print char !=" } +} + + +send "set variable v_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_char < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_char < 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print char <" } + -re "$prompt $" { fail "print char <" } + timeout { fail "(timeout) print char <" } + } + } + -re "$prompt $" { fail "print char <" } + timeout { fail "(timeout) print char <" } + } + } + -re "$prompt $" { fail "print char <" } + timeout { fail "(timeout) print char <" } +} + + +send "set variable v_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_char > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_char > 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print char >" } + -re "$prompt $" { fail "print char >" } + timeout { fail "(timeout) print char >" } + } + } + -re "$prompt $" { fail "print char >" } + timeout { fail "(timeout) print char >" } + } + } + -re "$prompt $" { fail "print char >" } + timeout { fail "(timeout) print char >" } +} + + +# +# test expressions with "signed char" types +# +send "set variable v_signed_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_char == 127\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed char ==" } + -re "$prompt $" { fail "print signed char ==" } + timeout { fail "(timeout) print signed char ==" } + } + } + -re "$prompt $" { fail "print signed char ==" } + timeout { fail "(timeout) print signed char ==" } + } + } + -re "$prompt $" { fail "print signed char ==" } + timeout { fail "(timeout) print signed char ==" } +} + + +send "set variable v_signed_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_char != 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed char !=" } + -re "$prompt $" { fail "print signed char !=" } + timeout { fail "(timeout) print signed char !=" } + } + } + -re "$prompt $" { fail "print signed char !=" } + timeout { fail "(timeout) print signed char !=" } + } + } + -re "$prompt $" { fail "print signed char !=" } + timeout { fail "(timeout) print signed char !=" } +} + + +send "set variable v_signed_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_char < 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed char <" } + -re "$prompt $" { fail "print signed char <" } + timeout { fail "(timeout) print signed char <" } + } + } + -re "$prompt $" { fail "print signed char <" } + timeout { fail "(timeout) print signed char <" } + } + } + -re "$prompt $" { fail "print signed char <" } + timeout { fail "(timeout) print signed char <" } +} + + +send "set variable v_signed_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_char > 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed char >" } + -re "$prompt $" { fail "print signed char >" } + timeout { fail "(timeout) print signed char >" } + } + } + -re "$prompt $" { fail "print signed char >" } + timeout { fail "(timeout) print signed char >" } + } + } + -re "$prompt $" { fail "print signed char >" } + timeout { fail "(timeout) print signed char >" } +} + + +# make char a minus +send "set variable v_signed_char=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_char == -1\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed char == (minus)" } + -re "$prompt $" { fail "print signed char == (minus)" } + timeout { fail "(timeout) print signed char == (minus)" } + } + } + -re "$prompt $" { fail "print signed char == (minus)" } + timeout { fail "(timeout) print signed char == (minus)" } + } + } + -re "$prompt $" { fail "print signed char == (minus)" } + timeout { fail "(timeout) print signed char == (minus)" } +} + + +send "set variable v_signed_char=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_char != -1\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed char != (minus)" } + -re "$prompt $" { fail "print signed char != (minus)" } + timeout { fail "(timeout) print signed char != (minus)" } + } + } + -re "$prompt $" { fail "print signed char != (minus)" } + timeout { fail "(timeout) print signed char != (minus)" } + } + } + -re "$prompt $" { fail "print signed char != (minus)" } + timeout { fail "(timeout) print signed char != (minus)" } +} + + +send "set variable v_signed_char=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char < 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_char < 127\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed char < (minus)" } + -re "$prompt $" { fail "print signed char < (minus)" } + timeout { fail "(timeout) print signed char < (minus)" } + } + } + -re "$prompt $" { fail "print signed char < (minus)" } + timeout { fail "(timeout) print signed char < (minus)" } + } + } + -re "$prompt $" { fail "print signed char < (minus)" } + timeout { fail "(timeout) print signed char < (minus)" } +} + + +send "set variable v_signed_char=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char > 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_char > 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed char > (minus)" } + -re "$prompt $" { fail "print signed char > (minus)" } + timeout { fail "(timeout) print signed char > (minus)" } + } + } + -re "$prompt $" { fail "print signed char > (minus)" } + timeout { fail "(timeout) print signed char > (minus)" } + } + } + -re "$prompt $" { fail "print signed char > (minus)" } + timeout { fail "(timeout) print signed char > (minus)" } +} + + +# +# test expressions with "unsigned char" types +# +send "set variable v_unsigned_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_char == 127\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned char ==" } + -re "$prompt $" { fail "print unsigned char ==" } + timeout { fail "(timeout) print unsigned char ==" } + } + } + -re "$prompt $" { fail "print unsigned char ==" } + timeout { fail "(timeout) print unsigned char ==" } + } + } + -re "$prompt $" { fail "print unsigned char ==" } + timeout { fail "(timeout) print unsigned char ==" } +} + + +send "set variable v_unsigned_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_char != 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned char !=" } + -re "$prompt $" { fail "print unsigned char !=" } + timeout { fail "(timeout) print unsigned char !=" } + } + } + -re "$prompt $" { fail "print unsigned char !=" } + timeout { fail "(timeout) print unsigned char !=" } + } + } + -re "$prompt $" { fail "print unsigned char !=" } + timeout { fail "(timeout) print unsigned char !=" } +} + + +send "set variable v_unsigned_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_char < 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned char <" } + -re "$prompt $" { fail "print unsigned char <" } + timeout { fail "(timeout) print unsigned char <" } + } + } + -re "$prompt $" { fail "print unsigned char <" } + timeout { fail "(timeout) print unsigned char <" } + } + } + -re "$prompt $" { fail "print unsigned char <" } + timeout { fail "(timeout) print unsigned char <" } +} + + +send "set variable v_unsigned_char=127\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_char > 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned char >" } + -re "$prompt $" { fail "print unsigned char >" } + timeout { fail "(timeout) print unsigned char >" } + } + } + -re "$prompt $" { fail "print unsigned char >" } + timeout { fail "(timeout) print unsigned char >" } + } + } + -re "$prompt $" { fail "print unsigned char >" } + timeout { fail "(timeout) print unsigned char >" } +} + + +# make char a minus +# FIXME: gdb mishandles the cast (unsigned char) on the i960, so I've +# set up an expected failure for this case. +send "set variable v_unsigned_char=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_char == ~0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + setup_xfail "i960-*-*" 1821 + send "print v_unsigned_char == (unsigned char)~0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned char == (~0)" } + -re "$prompt $" { fail "print unsigned char == (~0)" } + timeout { fail "(timeout) print unsigned char == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char == (~0)" } + timeout { fail "(timeout) print unsigned char == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char == (~0)" } + timeout { fail "(timeout) print unsigned char == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char == (~0)" } + timeout { fail "(timeout) print unsigned char == (~0)" } +} + + +# FIXME: gdb mishandles the cast (unsigned char) on the i960, so I've +# set up an expected failure for this case. +send "set variable v_unsigned_char=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + setup_xfail "i960-*-*" 1821 + send "print v_unsigned_char != (unsigned char)~0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned char != (~0)" } + -re "$prompt $" { fail "print unsigned char != (~0)" } + timeout { fail "(timeout) print unsigned char != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char != (~0)" } + timeout { fail "(timeout) print unsigned char != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char != (~0)" } + timeout { fail "(timeout) print unsigned char != (~0)" } +} + + +send "set variable v_unsigned_char=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_char < 127\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned char < (~0)" } + -re "$prompt $" { fail "print unsigned char < (~0)" } + timeout { fail "(timeout) print unsigned char < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char < (~0)" } + timeout { fail "(timeout) print unsigned char < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char < (~0)" } + timeout { fail "(timeout) print unsigned char < (~0)" } +} + + +send "set variable v_unsigned_char=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_char > 127\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned char > (~0)" } + -re "$prompt $" { fail "print unsigned char > (~0)" } + timeout { fail "(timeout) print unsigned char > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char > (~0)" } + timeout { fail "(timeout) print unsigned char > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned char > (~0)" } + timeout { fail "(timeout) print unsigned char > (~0)" } +} + + +# +# test expressions with "short" types +# +send "set variable v_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_short == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_short == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed short ==" } + -re "$prompt $" { fail "print signed short ==" } + timeout { fail "(timeout) print signed short ==" } + } + } + -re "$prompt $" { fail "print signed short ==" } + timeout { fail "(timeout) print signed short ==" } + } + } + -re "$prompt $" { fail "print signed short ==" } + timeout { fail "(timeout) print signed short ==" } +} + + +send "set variable v_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_short != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_short != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed short !=" } + -re "$prompt $" { fail "print signed short !=" } + timeout { fail "(timeout) print signed short !=" } + } + } + -re "$prompt $" { fail "print signed short !=" } + timeout { fail "(timeout) print signed short !=" } + } + } + -re "$prompt $" { fail "print signed short !=" } + timeout { fail "(timeout) print signed short !=" } +} + + +send "set variable v_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_short < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_short < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed short <" } + -re "$prompt $" { fail "print signed short <" } + timeout { fail "(timeout) print signed short <" } + } + } + -re "$prompt $" { fail "print signed short <" } + timeout { fail "(timeout) print signed short <" } + } + } + -re "$prompt $" { fail "print signed short <" } + timeout { fail "(timeout) print signed short <" } +} + + +send "set variable v_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_short > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_short > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed short >" } + -re "$prompt $" { fail "print signed short >" } + timeout { fail "(timeout) print signed short >" } + } + } + -re "$prompt $" { fail "print signed short >" } + timeout { fail "(timeout) print signed short >" } + } + } + -re "$prompt $" { fail "print signed short >" } + timeout { fail "(timeout) print signed short >" } +} + + +# make short a minus +send "set variable v_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_short == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_short == -1\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed short == (minus)" } + -re "$prompt $" { fail "print signed short == (minus)" } + timeout { fail "(timeout) print signed short == (minus)" } + } + } + -re "$prompt $" { fail "print signed short == (minus)" } + timeout { fail "(timeout) print signed short == (minus)" } + } + } + -re "$prompt $" { fail "print signed short == (minus)" } + timeout { fail "(timeout) print signed short == (minus)" } +} + + +send "set variable v_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_short != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_short != -1\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed short != (minus)" } + -re "$prompt $" { fail "print signed short != (minus)" } + timeout { fail "(timeout) print signed short != (minus)" } + } + } + -re "$prompt $" { fail "print signed short != (minus)" } + timeout { fail "(timeout) print signed short != (minus)" } + } + } + -re "$prompt $" { fail "print signed short != (minus)" } + timeout { fail "(timeout) print signed short != (minus)" } +} + + +send "set variable v_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_short < 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_short < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed short < (minus)" } + -re "$prompt $" { fail "print signed short < (minus)" } + timeout { fail "(timeout) print signed short < (minus)" } + } + } + -re "$prompt $" { fail "print signed short < (minus)" } + timeout { fail "(timeout) print signed short < (minus)" } + } + } + -re "$prompt $" { fail "print signed short < (minus)" } + timeout { fail "(timeout) print signed short < (minus)" } +} + + +send "set variable v_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_short > 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_short > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed short > (minus)" } + -re "$prompt $" { fail "print signed short > (minus)" } + timeout { fail "(timeout) print signed short > (minus)" } + } + } + -re "$prompt $" { fail "print signed short > (minus)" } + timeout { fail "(timeout) print signed short > (minus)" } + } + } + -re "$prompt $" { fail "print signed short > (minus)" } + timeout { fail "(timeout) print signed short > (minus)" } +} + + +# +# test expressions with "signed short" types +# +send "set variable v_signed_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_short == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed short ==" } + -re "$prompt $" { fail "print signed signed short ==" } + timeout { fail "(timeout) print signed signed short ==" } + } + } + -re "$prompt $" { fail "print signed signed short ==" } + timeout { fail "(timeout) print signed signed short ==" } + } + } + -re "$prompt $" { fail "print signed signed short ==" } + timeout { fail "(timeout) print signed signed short ==" } +} + + +send "set variable v_signed_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_short != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed short !=" } + -re "$prompt $" { fail "print signed signed short !=" } + timeout { fail "(timeout) print signed signed short !=" } + } + } + -re "$prompt $" { fail "print signed signed short !=" } + timeout { fail "(timeout) print signed signed short !=" } + } + } + -re "$prompt $" { fail "print signed signed short !=" } + timeout { fail "(timeout) print signed signed short !=" } +} + + +send "set variable v_signed_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_short < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed short <" } + -re "$prompt $" { fail "print signed signed short <" } + timeout { fail "(timeout) print signed signed short <" } + } + } + -re "$prompt $" { fail "print signed signed short <" } + timeout { fail "(timeout) print signed signed short <" } + } + } + -re "$prompt $" { fail "print signed signed short <" } + timeout { fail "(timeout) print signed signed short <" } +} + + +send "set variable v_signed_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_short > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed short >" } + -re "$prompt $" { fail "print signed signed short >" } + timeout { fail "(timeout) print signed signed short >" } + } + } + -re "$prompt $" { fail "print signed signed short >" } + timeout { fail "(timeout) print signed signed short >" } + } + } + -re "$prompt $" { fail "print signed signed short >" } + timeout { fail "(timeout) print signed signed short >" } +} + + +# make short a minus +send "set variable v_signed_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_short == -1\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed short == (minus)" } + -re "$prompt $" { fail "print signed signed short == (minus)" } + timeout { fail "(timeout) print signed signed short == (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short == (minus)" } + timeout { fail "(timeout) print signed signed short == (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short == (minus)" } + timeout { fail "(timeout) print signed signed short == (minus)" } +} + + +send "set variable v_signed_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_short != -1\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed short != (minus)" } + -re "$prompt $" { fail "print signed signed short != (minus)" } + timeout { fail "(timeout) print signed signed short != (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short != (minus)" } + timeout { fail "(timeout) print signed signed short != (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short != (minus)" } + timeout { fail "(timeout) print signed signed short != (minus)" } +} + + +send "set variable v_signed_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short < 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_short < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed short < (minus)" } + -re "$prompt $" { fail "print signed signed short < (minus)" } + timeout { fail "(timeout) print signed signed short < (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short < (minus)" } + timeout { fail "(timeout) print signed signed short < (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short < (minus)" } + timeout { fail "(timeout) print signed signed short < (minus)" } +} + + +send "set variable v_signed_short=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short > 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_short > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed short > (minus)" } + -re "$prompt $" { fail "print signed signed short > (minus)" } + timeout { fail "(timeout) print signed signed short > (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short > (minus)" } + timeout { fail "(timeout) print signed signed short > (minus)" } + } + } + -re "$prompt $" { fail "print signed signed short > (minus)" } + timeout { fail "(timeout) print signed signed short > (minus)" } +} + + +# +# test expressions with "unsigned short" types +# +send "set variable v_unsigned_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_short == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned short ==" } + -re "$prompt $" { fail "print unsigned short ==" } + timeout { fail "(timeout) print unsigned short ==" } + } + } + -re "$prompt $" { fail "print unsigned short ==" } + timeout { fail "(timeout) print unsigned short ==" } + } + } + -re "$prompt $" { fail "print unsigned short ==" } + timeout { fail "(timeout) print unsigned short ==" } +} + + +send "set variable v_unsigned_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_short != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned short !=" } + -re "$prompt $" { fail "print unsigned short !=" } + timeout { fail "(timeout) print unsigned short !=" } + } + } + -re "$prompt $" { fail "print unsigned short !=" } + timeout { fail "(timeout) print unsigned short !=" } + } + } + -re "$prompt $" { fail "print unsigned short !=" } + timeout { fail "(timeout) print unsigned short !=" } +} + + +send "set variable v_unsigned_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_short < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned short <" } + -re "$prompt $" { fail "print unsigned short <" } + timeout { fail "(timeout) print unsigned short <" } + } + } + -re "$prompt $" { fail "print unsigned short <" } + timeout { fail "(timeout) print unsigned short <" } + } + } + -re "$prompt $" { fail "print unsigned short <" } + timeout { fail "(timeout) print unsigned short <" } +} + + +send "set variable v_unsigned_short=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_short > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned short >" } + -re "$prompt $" { fail "print unsigned short >" } + timeout { fail "(timeout) print unsigned short >" } + } + } + -re "$prompt $" { fail "print unsigned short >" } + timeout { fail "(timeout) print unsigned short >" } + } + } + -re "$prompt $" { fail "print unsigned short >" } + timeout { fail "(timeout) print unsigned short >" } +} + + +# make short a minus +send "set variable v_unsigned_short=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_short == ~0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_short == (unsigned short)~0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned short == (~0)" } + -re "$prompt $" { fail "print unsigned short == (~0)" } + timeout { fail "(timeout) print unsigned short == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short == (~0)" } + timeout { fail "(timeout) print unsigned short == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short == (~0)" } + timeout { fail "(timeout) print unsigned short == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short == (~0)" } + timeout { fail "(timeout) print unsigned short == (~0)" } +} + + +send "set variable v_unsigned_short=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_short != (unsigned short)~0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned short != (~0)" } + -re "$prompt $" { fail "print unsigned short != (~0)" } + timeout { fail "(timeout) print unsigned short != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short != (~0)" } + timeout { fail "(timeout) print unsigned short != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short != (~0)" } + timeout { fail "(timeout) print unsigned short != (~0)" } +} + + +send "set variable v_unsigned_short=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_short < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned short < (~0)" } + -re "$prompt $" { fail "print unsigned short < (~0)" } + timeout { fail "(timeout) print unsigned short < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short < (~0)" } + timeout { fail "(timeout) print unsigned short < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short < (~0)" } + timeout { fail "(timeout) print unsigned short < (~0)" } +} + + +send "set variable v_unsigned_short=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_short > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned short > (~0)" } + -re "$prompt $" { fail "print unsigned short > (~0)" } + timeout { fail "(timeout) print unsigned short > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short > (~0)" } + timeout { fail "(timeout) print unsigned short > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned short > (~0)" } + timeout { fail "(timeout) print unsigned short > (~0)" } +} + + +# +# test expressions with "int" types +# +send "set variable v_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_int == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_int == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed int ==" } + -re "$prompt $" { fail "print signed int ==" } + timeout { fail "(timeout) print signed int ==" } + } + } + -re "$prompt $" { fail "print signed int ==" } + timeout { fail "(timeout) print signed int ==" } + } + } + -re "$prompt $" { fail "print signed int ==" } + timeout { fail "(timeout) print signed int ==" } +} + + +send "set variable v_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_int != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_int != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed int !=" } + -re "$prompt $" { fail "print signed int !=" } + timeout { fail "(timeout) print signed int !=" } + } + } + -re "$prompt $" { fail "print signed int !=" } + timeout { fail "(timeout) print signed int !=" } + } + } + -re "$prompt $" { fail "print signed int !=" } + timeout { fail "(timeout) print signed int !=" } +} + + +send "set variable v_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_int < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_int < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed int <" } + -re "$prompt $" { fail "print signed int <" } + timeout { fail "(timeout) print signed int <" } + } + } + -re "$prompt $" { fail "print signed int <" } + timeout { fail "(timeout) print signed int <" } + } + } + -re "$prompt $" { fail "print signed int <" } + timeout { fail "(timeout) print signed int <" } +} + + +send "set variable v_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_int > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_int > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed int >" } + -re "$prompt $" { fail "print signed int >" } + timeout { fail "(timeout) print signed int >" } + } + } + -re "$prompt $" { fail "print signed int >" } + timeout { fail "(timeout) print signed int >" } + } + } + -re "$prompt $" { fail "print signed int >" } + timeout { fail "(timeout) print signed int >" } +} + + +# make int a minus +send "set variable v_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_int == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_int == -1\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed int == (minus)" } + -re "$prompt $" { fail "print signed int == (minus)" } + timeout { fail "(timeout) print signed int == (minus)" } + } + } + -re "$prompt $" { fail "print signed int == (minus)" } + timeout { fail "(timeout) print signed int == (minus)" } + } + } + -re "$prompt $" { fail "print signed int == (minus)" } + timeout { fail "(timeout) print signed int == (minus)" } +} + + +send "set variable v_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_int != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_int != -1\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed int != (minus)" } + -re "$prompt $" { fail "print signed int != (minus)" } + timeout { fail "(timeout) print signed int != (minus)" } + } + } + -re "$prompt $" { fail "print signed int != (minus)" } + timeout { fail "(timeout) print signed int != (minus)" } + } + } + -re "$prompt $" { fail "print signed int != (minus)" } + timeout { fail "(timeout) print signed int != (minus)" } +} + + +send "set variable v_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_int < 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_int < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed int < (minus)" } + -re "$prompt $" { fail "print signed int < (minus)" } + timeout { fail "(timeout) print signed int < (minus)" } + } + } + -re "$prompt $" { fail "print signed int < (minus)" } + timeout { fail "(timeout) print signed int < (minus)" } + } + } + -re "$prompt $" { fail "print signed int < (minus)" } + timeout { fail "(timeout) print signed int < (minus)" } +} + + +send "set variable v_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_int > 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_int > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed int > (minus)" } + -re "$prompt $" { fail "print signed int > (minus)" } + timeout { fail "(timeout) print signed int > (minus)" } + } + } + -re "$prompt $" { fail "print signed int > (minus)" } + timeout { fail "(timeout) print signed int > (minus)" } + } + } + -re "$prompt $" { fail "print signed int > (minus)" } + timeout { fail "(timeout) print signed int > (minus)" } +} + + +# +# test expressions with "signed int" types +# +send "set variable v_signed_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_int == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed int ==" } + -re "$prompt $" { fail "print signed signed int ==" } + timeout { fail "(timeout) print signed signed int ==" } + } + } + -re "$prompt $" { fail "print signed signed int ==" } + timeout { fail "(timeout) print signed signed int ==" } + } + } + -re "$prompt $" { fail "print signed signed int ==" } + timeout { fail "(timeout) print signed signed int ==" } +} + + +send "set variable v_signed_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_int != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed int !=" } + -re "$prompt $" { fail "print signed signed int !=" } + timeout { fail "(timeout) print signed signed int !=" } + } + } + -re "$prompt $" { fail "print signed signed int !=" } + timeout { fail "(timeout) print signed signed int !=" } + } + } + -re "$prompt $" { fail "print signed signed int !=" } + timeout { fail "(timeout) print signed signed int !=" } +} + + +send "set variable v_signed_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_int < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed int <" } + -re "$prompt $" { fail "print signed signed int <" } + timeout { fail "(timeout) print signed signed int <" } + } + } + -re "$prompt $" { fail "print signed signed int <" } + timeout { fail "(timeout) print signed signed int <" } + } + } + -re "$prompt $" { fail "print signed signed int <" } + timeout { fail "(timeout) print signed signed int <" } +} + + +send "set variable v_signed_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_int > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed int >" } + -re "$prompt $" { fail "print signed signed int >" } + timeout { fail "(timeout) print signed signed int >" } + } + } + -re "$prompt $" { fail "print signed signed int >" } + timeout { fail "(timeout) print signed signed int >" } + } + } + -re "$prompt $" { fail "print signed signed int >" } + timeout { fail "(timeout) print signed signed int >" } +} + + +# make int a minus +send "set variable v_signed_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_int == -1\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed int == (minus)" } + -re "$prompt $" { fail "print signed signed int == (minus)" } + timeout { fail "(timeout) print signed signed int == (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int == (minus)" } + timeout { fail "(timeout) print signed signed int == (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int == (minus)" } + timeout { fail "(timeout) print signed signed int == (minus)" } +} + + +send "set variable v_signed_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_int != -1\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed int != (minus)" } + -re "$prompt $" { fail "print signed signed int != (minus)" } + timeout { fail "(timeout) print signed signed int != (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int != (minus)" } + timeout { fail "(timeout) print signed signed int != (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int != (minus)" } + timeout { fail "(timeout) print signed signed int != (minus)" } +} + + +send "set variable v_signed_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int < 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_int < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed int < (minus)" } + -re "$prompt $" { fail "print signed signed int < (minus)" } + timeout { fail "(timeout) print signed signed int < (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int < (minus)" } + timeout { fail "(timeout) print signed signed int < (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int < (minus)" } + timeout { fail "(timeout) print signed signed int < (minus)" } +} + + +send "set variable v_signed_int=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int > 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_int > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed int > (minus)" } + -re "$prompt $" { fail "print signed signed int > (minus)" } + timeout { fail "(timeout) print signed signed int > (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int > (minus)" } + timeout { fail "(timeout) print signed signed int > (minus)" } + } + } + -re "$prompt $" { fail "print signed signed int > (minus)" } + timeout { fail "(timeout) print signed signed int > (minus)" } +} + + +# +# test expressions with "unsigned int" types +# +send "set variable v_unsigned_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_int == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned int ==" } + -re "$prompt $" { fail "print unsigned int ==" } + timeout { fail "(timeout) print unsigned int ==" } + } + } + -re "$prompt $" { fail "print unsigned int ==" } + timeout { fail "(timeout) print unsigned int ==" } + } + } + -re "$prompt $" { fail "print unsigned int ==" } + timeout { fail "(timeout) print unsigned int ==" } +} + + +send "set variable v_unsigned_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_int != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned int !=" } + -re "$prompt $" { fail "print unsigned int !=" } + timeout { fail "(timeout) print unsigned int !=" } + } + } + -re "$prompt $" { fail "print unsigned int !=" } + timeout { fail "(timeout) print unsigned int !=" } + } + } + -re "$prompt $" { fail "print unsigned int !=" } + timeout { fail "(timeout) print unsigned int !=" } +} + + +send "set variable v_unsigned_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_int < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned int <" } + -re "$prompt $" { fail "print unsigned int <" } + timeout { fail "(timeout) print unsigned int <" } + } + } + -re "$prompt $" { fail "print unsigned int <" } + timeout { fail "(timeout) print unsigned int <" } + } + } + -re "$prompt $" { fail "print unsigned int <" } + timeout { fail "(timeout) print unsigned int <" } +} + + +send "set variable v_unsigned_int=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_int > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned int >" } + -re "$prompt $" { fail "print unsigned int >" } + timeout { fail "(timeout) print unsigned int >" } + } + } + -re "$prompt $" { fail "print unsigned int >" } + timeout { fail "(timeout) print unsigned int >" } + } + } + -re "$prompt $" { fail "print unsigned int >" } + timeout { fail "(timeout) print unsigned int >" } +} + + +# make int a minus +send "set variable v_unsigned_int=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_int == ~0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_int == (unsigned int)~0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned int == (~0)" } + -re "$prompt $" { fail "print unsigned int == (~0)" } + timeout { fail "(timeout) print unsigned int == (~0)" } + } + } + -re "print.*.\[0-9\]* = 0.*$prompt $" { +# gdb currently compares all values as long, so this failure probably +# applies to any configuration where LONGEST is bigger than a target int. + setup_xfail "alpha-*-*" + fail "print unsigned int == (~0)" + send "print v_unsigned_int == (unsigned int)~0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned int == (~0)" } + -re "$prompt $" { fail "print unsigned int == (~0)" } + timeout { fail "(timeout) print unsigned int == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int == (~0)" } + timeout { fail "(timeout) print unsigned int == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int == (~0)" } + timeout { fail "(timeout) print unsigned int == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int == (~0)" } + timeout { fail "(timeout) print unsigned int == (~0)" } +} + + +send "set variable v_unsigned_int=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_int != (unsigned int)~0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned int != (~0)" } + -re "$prompt $" { fail "print unsigned int != (~0)" } + timeout { fail "(timeout) print unsigned int != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int != (~0)" } + timeout { fail "(timeout) print unsigned int != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int != (~0)" } + timeout { fail "(timeout) print unsigned int != (~0)" } +} + + +send "set variable v_unsigned_int=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_int < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned int < (~0)" } + -re "$prompt $" { fail "print unsigned int < (~0)" } + timeout { fail "(timeout) print unsigned int < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int < (~0)" } + timeout { fail "(timeout) print unsigned int < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int < (~0)" } + timeout { fail "(timeout) print unsigned int < (~0)" } +} + + +send "set variable v_unsigned_int=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_int > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned int > (~0)" } + -re "$prompt $" { fail "print unsigned int > (~0)" } + timeout { fail "(timeout) print unsigned int > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int > (~0)" } + timeout { fail "(timeout) print unsigned int > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned int > (~0)" } + timeout { fail "(timeout) print unsigned int > (~0)" } +} + + +# +# test expressions with "long" types +# +send "set variable v_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_long == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_long == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed long ==" } + -re "$prompt $" { fail "print signed long ==" } + timeout { fail "(timeout) print signed long ==" } + } + } + -re "$prompt $" { fail "print signed long ==" } + timeout { fail "(timeout) print signed long ==" } + } + } + -re "$prompt $" { fail "print signed long ==" } + timeout { fail "(timeout) print signed long ==" } +} + + +send "set variable v_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_long != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_long != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed long !=" } + -re "$prompt $" { fail "print signed long !=" } + timeout { fail "(timeout) print signed long !=" } + } + } + -re "$prompt $" { fail "print signed long !=" } + timeout { fail "(timeout) print signed long !=" } + } + } + -re "$prompt $" { fail "print signed long !=" } + timeout { fail "(timeout) print signed long !=" } +} + + +send "set variable v_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_long < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_long < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed long <" } + -re "$prompt $" { fail "print signed long <" } + timeout { fail "(timeout) print signed long <" } + } + } + -re "$prompt $" { fail "print signed long <" } + timeout { fail "(timeout) print signed long <" } + } + } + -re "$prompt $" { fail "print signed long <" } + timeout { fail "(timeout) print signed long <" } +} + + +send "set variable v_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_long > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_long > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed long >" } + -re "$prompt $" { fail "print signed long >" } + timeout { fail "(timeout) print signed long >" } + } + } + -re "$prompt $" { fail "print signed long >" } + timeout { fail "(timeout) print signed long >" } + } + } + -re "$prompt $" { fail "print signed long >" } + timeout { fail "(timeout) print signed long >" } +} + + +# make long a minus +send "set variable v_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_long == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_long == -1\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed long == (minus)" } + -re "$prompt $" { fail "print signed long == (minus)" } + timeout { fail "(timeout) print signed long == (minus)" } + } + } + -re "$prompt $" { fail "print signed long == (minus)" } + timeout { fail "(timeout) print signed long == (minus)" } + } + } + -re "$prompt $" { fail "print signed long == (minus)" } + timeout { fail "(timeout) print signed long == (minus)" } +} + + +send "set variable v_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_long != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_long != -1\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed long != (minus)" } + -re "$prompt $" { fail "print signed long != (minus)" } + timeout { fail "(timeout) print signed long != (minus)" } + } + } + -re "$prompt $" { fail "print signed long != (minus)" } + timeout { fail "(timeout) print signed long != (minus)" } + } + } + -re "$prompt $" { fail "print signed long != (minus)" } + timeout { fail "(timeout) print signed long != (minus)" } +} + + +send "set variable v_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_long < 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_long < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed long < (minus)" } + -re "$prompt $" { fail "print signed long < (minus)" } + timeout { fail "(timeout) print signed long < (minus)" } + } + } + -re "$prompt $" { fail "print signed long < (minus)" } + timeout { fail "(timeout) print signed long < (minus)" } + } + } + -re "$prompt $" { fail "print signed long < (minus)" } + timeout { fail "(timeout) print signed long < (minus)" } +} + + +send "set variable v_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_long > 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_long > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed long > (minus)" } + -re "$prompt $" { fail "print signed long > (minus)" } + timeout { fail "(timeout) print signed long > (minus)" } + } + } + -re "$prompt $" { fail "print signed long > (minus)" } + timeout { fail "(timeout) print signed long > (minus)" } + } + } + -re "$prompt $" { fail "print signed long > (minus)" } + timeout { fail "(timeout) print signed long > (minus)" } +} + + +# +# test expressions with "signed long" types +# +send "set variable v_signed_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_long == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed long ==" } + -re "$prompt $" { fail "print signed signed long ==" } + timeout { fail "(timeout) print signed signed long ==" } + } + } + -re "$prompt $" { fail "print signed signed long ==" } + timeout { fail "(timeout) print signed signed long ==" } + } + } + -re "$prompt $" { fail "print signed signed long ==" } + timeout { fail "(timeout) print signed signed long ==" } +} + + +send "set variable v_signed_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_long != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed long !=" } + -re "$prompt $" { fail "print signed signed long !=" } + timeout { fail "(timeout) print signed signed long !=" } + } + } + -re "$prompt $" { fail "print signed signed long !=" } + timeout { fail "(timeout) print signed signed long !=" } + } + } + -re "$prompt $" { fail "print signed signed long !=" } + timeout { fail "(timeout) print signed signed long !=" } +} + + +send "set variable v_signed_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_long < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed long <" } + -re "$prompt $" { fail "print signed signed long <" } + timeout { fail "(timeout) print signed signed long <" } + } + } + -re "$prompt $" { fail "print signed signed long <" } + timeout { fail "(timeout) print signed signed long <" } + } + } + -re "$prompt $" { fail "print signed signed long <" } + timeout { fail "(timeout) print signed signed long <" } +} + + +send "set variable v_signed_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_long > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed long >" } + -re "$prompt $" { fail "print signed signed long >" } + timeout { fail "(timeout) print signed signed long >" } + } + } + -re "$prompt $" { fail "print signed signed long >" } + timeout { fail "(timeout) print signed signed long >" } + } + } + -re "$prompt $" { fail "print signed signed long >" } + timeout { fail "(timeout) print signed signed long >" } +} + + +# make long a minus +send "set variable v_signed_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_long == -1\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed long == (minus)" } + -re "$prompt $" { fail "print signed signed long == (minus)" } + timeout { fail "(timeout) print signed signed long == (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long == (minus)" } + timeout { fail "(timeout) print signed signed long == (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long == (minus)" } + timeout { fail "(timeout) print signed signed long == (minus)" } +} + + +send "set variable v_signed_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_long != -1\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed long != (minus)" } + -re "$prompt $" { fail "print signed signed long != (minus)" } + timeout { fail "(timeout) print signed signed long != (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long != (minus)" } + timeout { fail "(timeout) print signed signed long != (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long != (minus)" } + timeout { fail "(timeout) print signed signed long != (minus)" } +} + + +send "set variable v_signed_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long < 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_signed_long < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print signed signed long < (minus)" } + -re "$prompt $" { fail "print signed signed long < (minus)" } + timeout { fail "(timeout) print signed signed long < (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long < (minus)" } + timeout { fail "(timeout) print signed signed long < (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long < (minus)" } + timeout { fail "(timeout) print signed signed long < (minus)" } +} + + +send "set variable v_signed_long=-1\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long > 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_signed_long > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print signed signed long > (minus)" } + -re "$prompt $" { fail "print signed signed long > (minus)" } + timeout { fail "(timeout) print signed signed long > (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long > (minus)" } + timeout { fail "(timeout) print signed signed long > (minus)" } + } + } + -re "$prompt $" { fail "print signed signed long > (minus)" } + timeout { fail "(timeout) print signed signed long > (minus)" } +} + + +# +# test expressions with "unsigned long" types +# +send "set variable v_unsigned_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_long == 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned long ==" } + -re "$prompt $" { fail "print unsigned long ==" } + timeout { fail "(timeout) print unsigned long ==" } + } + } + -re "$prompt $" { fail "print unsigned long ==" } + timeout { fail "(timeout) print unsigned long ==" } + } + } + -re "$prompt $" { fail "print unsigned long ==" } + timeout { fail "(timeout) print unsigned long ==" } +} + + +send "set variable v_unsigned_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_long != 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned long !=" } + -re "$prompt $" { fail "print unsigned long !=" } + timeout { fail "(timeout) print unsigned long !=" } + } + } + -re "$prompt $" { fail "print unsigned long !=" } + timeout { fail "(timeout) print unsigned long !=" } + } + } + -re "$prompt $" { fail "print unsigned long !=" } + timeout { fail "(timeout) print unsigned long !=" } +} + + +send "set variable v_unsigned_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_long < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned long <" } + -re "$prompt $" { fail "print unsigned long <" } + timeout { fail "(timeout) print unsigned long <" } + } + } + -re "$prompt $" { fail "print unsigned long <" } + timeout { fail "(timeout) print unsigned long <" } + } + } + -re "$prompt $" { fail "print unsigned long <" } + timeout { fail "(timeout) print unsigned long <" } +} + + +send "set variable v_unsigned_long=0x7FFF\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_long > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned long >" } + -re "$prompt $" { fail "print unsigned long >" } + timeout { fail "(timeout) print unsigned long >" } + } + } + -re "$prompt $" { fail "print unsigned long >" } + timeout { fail "(timeout) print unsigned long >" } + } + } + -re "$prompt $" { fail "print unsigned long >" } + timeout { fail "(timeout) print unsigned long >" } +} + + +# make long a minus +send "set variable v_unsigned_long=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long == 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_long == ~0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_long == (unsigned long)~0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned long == (~0)" } + -re "$prompt $" { fail "print unsigned long == (~0)" } + timeout { fail "(timeout) print unsigned long == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long == (~0)" } + timeout { fail "(timeout) print unsigned long == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long == (~0)" } + timeout { fail "(timeout) print unsigned long == (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long == (~0)" } + timeout { fail "(timeout) print unsigned long == (~0)" } +} + + +send "set variable v_unsigned_long=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long != 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_long != (unsigned long)~0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned long != (~0)" } + -re "$prompt $" { fail "print unsigned long != (~0)" } + timeout { fail "(timeout) print unsigned long != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long != (~0)" } + timeout { fail "(timeout) print unsigned long != (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long != (~0)" } + timeout { fail "(timeout) print unsigned long != (~0)" } +} + + +send "set variable v_unsigned_long=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long < 0\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { + send "print v_unsigned_long < 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 0.*$prompt $" { pass "print unsigned long < (~0)" } + -re "$prompt $" { fail "print unsigned long < (~0)" } + timeout { fail "(timeout) print unsigned long < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long < (~0)" } + timeout { fail "(timeout) print unsigned long < (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long < (~0)" } + timeout { fail "(timeout) print unsigned long < (~0)" } +} + + +send "set variable v_unsigned_long=~0\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long > 0\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { + send "print v_unsigned_long > 0x7FFF\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "print unsigned long > (~0)" } + -re "$prompt $" { fail "print unsigned long > (~0)" } + timeout { fail "(timeout) print unsigned long > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long > (~0)" } + timeout { fail "(timeout) print unsigned long > (~0)" } + } + } + -re "$prompt $" { fail "print unsigned long > (~0)" } + timeout { fail "(timeout) print unsigned long > (~0)" } +} + +if [istarget "a29k-*-udi"] then { + # FIXME: If PR 2415 is fixed, this is not needed. + gdb_target_udi +} diff --git a/gdb/testsuite/gdb.base/funcargs.c b/gdb/testsuite/gdb.base/funcargs.c new file mode 100644 index 0000000..6c0fdd0 --- /dev/null +++ b/gdb/testsuite/gdb.base/funcargs.c @@ -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. */ +} diff --git a/gdb/testsuite/gdb.base/funcargs.exp b/gdb/testsuite/gdb.base/funcargs.exp new file mode 100644 index 0000000..e5f4a43 --- /dev/null +++ b/gdb/testsuite/gdb.base/funcargs.exp @@ -0,0 +1,1509 @@ +# 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 "funcargs" +set srcfile $binfile.c + +if ![file exists $objdir/$subdir/$binfile] then { + perror "$objdir/$subdir/$binfile does not exist." + continue +} + +# +# Locate actual args; integral types. +# + +proc integral_args {} { + global prompt + global det_file + + delete_breakpoints + + send "break call0a\n" ; expect -re ".*$prompt $" + send "break call0b\n" ; expect -re ".*$prompt $" + send "break call0c\n" ; expect -re ".*$prompt $" + send "break call0d\n" ; expect -re ".*$prompt $" + send "break call0e\n" ; expect -re ".*$prompt $" + + # Run; should stop at call0a and print actual arguments. + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".* call0a \[(\]+c=97 'a', s=1, i=2, l=3\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "run to call0a" ; return } + timeout { fail "(timeout) run to call0a" ; return } + } + + # Print each arg as a double check to see if we can print + # them here as well as with backtrace. + + send "print c\n" + expect { + -re ".* = 97 'a'\r\n$prompt $" {} + -re "$prompt $" { fail "print c" ; return } + timeout { fail "(timeout) print c" ; return } + } + send "print s\n" + expect { + -re ".* = 1\r\n$prompt $" {} + -re "$prompt $" { fail "print s" ; return } + timeout { fail "(timeout) print s" ; return } + } + send "print i\n" + expect { + -re ".* = 2\r\n$prompt $" {} + -re "$prompt $" { fail "print i" ; return } + timeout { fail "(timeout) print i" ; return } + } + send "print l\n" + expect { + -re ".* = 3\r\n$prompt $" {} + -re "$prompt $" { fail "print l" ; return } + timeout { fail "(timeout) print l" ; return } + } + + # Continue; should stop at call0b and print actual arguments. + + send "cont\n" + expect { + -re ".* call0b \[(\]+s=1, i=2, l=3, c=97 'a'\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call0b" ; return } + timeout { fail "(timeout) continue to call0b" ; return } + } + + # Continue; should stop at call0c and print actual arguments. + + send "cont\n" + expect { + -re ".* call0c \[(\]+i=2, l=3, c=97 'a', s=1\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call0c" ; return } + timeout { fail "(timeout) continue to call0c" ; return } + } + + # Continue; should stop at call0d and print actual arguments. + + send "cont\n" + expect { + -re ".* call0d \[(\]+l=3, c=97 'a', s=1, i=2\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call0d" ; return } + timeout { fail "(timeout) continue to call0d" ; return } + } + + # Continue; should stop at call0e and print actual arguments. + + send "cont\n" + expect { + -re ".* call0e \[(\]+c1=97 'a', l=3, c2=97 'a', i=2, c3=97 'a', s=1, c4=97 'a', c5=97 'a'\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call0e" ; return } + timeout { fail "(timeout) continue to call0e" ; return } + } + + pass "locate actual args, signed integral types" +} + +# +# Locate actual args; unsigned integral types. +# + +proc unsigned_integral_args {} { + global prompt + global det_file + + delete_breakpoints + + send "break call1a\n" ; expect -re ".*$prompt $" + send "break call1b\n" ; expect -re ".*$prompt $" + send "break call1c\n" ; expect -re ".*$prompt $" + send "break call1d\n" ; expect -re ".*$prompt $" + send "break call1e\n" ; expect -re ".*$prompt $" + + # Run; should stop at call1a and print actual arguments. + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".* call1a \[(\]+uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "run to call1a" ; return } + timeout { fail "(timeout) run to call1a" ; return } + } + + # Print each arg as a double check to see if we can print + # them here as well as with backtrace. + + send "print uc\n" + expect { + -re ".* = 98 'b'\r\n$prompt $" {} + -re "$prompt $" { fail "print uc" ; return } + timeout { fail "(timeout) print uc" ; return } + } + send "print us\n" + expect { + -re ".* = 6\r\n$prompt $" {} + -re "$prompt $" { fail "print us" ; return } + timeout { fail "(timeout) print us" ; return } + } + send "print ui\n" + expect { + -re ".* = 7\r\n$prompt $" {} + -re "$prompt $" { fail "print ui" ; return } + timeout { fail "(timeout) print ui" ; return } + } + send "print ul\n" + expect { + -re ".* = 8\r\n$prompt $" {} + -re "$prompt $" { fail "print ul" ; return } + timeout { fail "(timeout) print ul" ; return } + } + + # Continue; should stop at call1b and print actual arguments. + + send "cont\n" + expect { + -re ".* call1b \[(\]+us=6, ui=7, ul=8, uc=98 'b'\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call1b" ; return } + timeout { fail "(timeout) continue to call1b" ; return } + } + + # Continue; should stop at call1c and print actual arguments. + + send "cont\n" + expect { + -re ".* call1c \[(\]+ui=7, ul=8, uc=98 'b', us=6\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call1c" ; return } + timeout { fail "(timeout) continue to call1c" ; return } + } + + # Continue; should stop at call1d and print actual arguments. + + send "cont\n" + expect { + -re ".* call1d \[(\]+ul=8, uc=98 'b', us=6, ui=7\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call1d" ; return } + timeout { fail "(timeout) continue to call1d" ; return } + } + + # Continue; should stop at call1e and print actual arguments. + + send "cont\n" + expect { + -re ".* call1e \[(\]+uc1=98 'b', ul=8, uc2=98 'b', ui=7, uc3=98 'b', us=6, uc4=98 'b', uc5=98 'b'\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call1e" ; return } + timeout { fail "(timeout) continue to call1e" ; return } + } + + pass "locate actual args, unsigned integral types" +} + +# +# Locate actual args; integrals mixed with floating point. +# + +proc float_and_integral_args {} { + global prompt + global det_file + + delete_breakpoints + + send "break call2a\n" ; expect -re ".*$prompt $" + send "break call2b\n" ; expect -re ".*$prompt $" + send "break call2c\n" ; expect -re ".*$prompt $" + send "break call2d\n" ; expect -re ".*$prompt $" + send "break call2e\n" ; expect -re ".*$prompt $" + send "break call2f\n" ; expect -re ".*$prompt $" + send "break call2g\n" ; expect -re ".*$prompt $" + send "break call2h\n" ; expect -re ".*$prompt $" + send "break call2i\n" ; expect -re ".*$prompt $" + + # Run; should stop at call2a and print actual arguments. + + setup_xfail "i960-*-*" 1813 + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".* call2a \[(\]+c=97 'a', f1=4, s=1, d1=5, i=2, f2=4, l=3, d2=5\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "run to call2a" ; return } + timeout { fail "(timeout) run to call2a" ; return } + } + + # Print each arg as a double check to see if we can print + + send "print c\n" + expect { + -re ".* = 97 'a'\r\n$prompt $" {} + -re "$prompt $" { fail "print c" ; return } + timeout { fail "(timeout) print c" ; return } + } + send "print f1\n" + expect { + -re ".* = 4\r\n$prompt $" {} + -re "$prompt $" { fail "print f1" ; return } + timeout { fail "(timeout) print f1" ; return } + } + send "print s\n" + expect { + -re ".* = 1\r\n$prompt $" {} + -re "$prompt $" { fail "print s" ; return } + timeout { fail "(timeout) print s" ; return } + } + send "print d1\n" + expect { + -re ".* = 5\r\n$prompt $" {} + -re "$prompt $" { fail "print d1" ; return } + timeout { fail "(timeout) print d1" ; return } + } + send "print i\n" + expect { + -re ".* = 2\r\n$prompt $" {} + -re "$prompt $" { fail "print i" ; return } + timeout { fail "(timeout) print i" ; return } + } + send "print f2\n" + expect { + -re ".* = 4\r\n$prompt $" {} + -re "$prompt $" { fail "print f2" ; return } + timeout { fail "(timeout) print f2" ; return } + } + send "print l\n" + expect { + -re ".* = 3\r\n$prompt $" {} + -re "$prompt $" { fail "print l" ; return } + timeout { fail "(timeout) print l" ; return } + } + send "print d2\n" + expect { + -re ".* = 5\r\n$prompt $" {} + -re "$prompt $" { fail "print d2" ; return } + timeout { fail "(timeout) print d2" ; return } + } + + # Continue; should stop at call2b and print actual arguments. + + send "cont\n" + expect { + -re ".* call2b \[(\]+f1=4, s=1, d1=5, i=2, f2=4, l=3, d2=5, c=97 'a'\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2b" ; return } + timeout { fail "(timeout) continue to call2b" ; return } + } + + # Continue; should stop at call2c and print actual arguments. + + send "cont\n" + expect { + -re ".* call2c \[(\]+s=1, d1=5, i=2, f2=4, l=3, d2=5, c=97 'a', f1=4\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2c" ; return } + timeout { fail "(timeout) continue to call2c" ; return } + } + + # Continue; should stop at call2d and print actual arguments. + + send "cont\n" + expect { + -re ".* call2d \[(\]+d1=5, i=2, f2=4, l=3, d2=5, c=97 'a', f1=4, s=1\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2d" ; return } + timeout { fail "(timeout) continue to call2d" ; return } + } + + # Continue; should stop at call2e and print actual arguments. + + send "cont\n" + expect { + -re ".* call2e \[(\]+i=2, f2=4, l=3, d2=5, c=97 'a', f1=4, s=1, d1=5\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2e" ; return } + timeout { fail "(timeout) continue to call2e" ; return } + } + + # Continue; should stop at call2f and print actual arguments. + + send "cont\n" + expect { + -re ".* call2f \[(\]+f2=4, l=3, d2=5, c=97 'a', f1=4, s=1, d1=5, i=2\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2f" ; return } + timeout { fail "(timeout) continue to call2f" ; return } + } + + # Continue; should stop at call2g and print actual arguments. + + send "cont\n" + expect { + -re ".* call2g \[(\]+l=3, d2=5, c=97 'a', f1=4, s=1, d1=5, i=2, f2=4\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2g" ; return } + timeout { fail "(timeout) continue to call2g" ; return } + } + + # Continue; should stop at call2h and print actual arguments. + + send "cont\n" + expect { + -re ".* call2h \[(\]+d2=5, c=97 'a', f1=4, s=1, d1=5, i=2, f2=4, l=3\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2h" ; return } + timeout { fail "(timeout) continue to call2h" ; return } + } + + # Continue; should stop at call2i and print actual arguments. + + send "cont\n" + expect { + -re ".* call2i \[(\]+c1=97 'a', f1=4, c2=97 'a', c3=97 'a', d1=5, c4=97 'a', c5=97 'a', c6=97 'a', f2=4, s=1, c7=97 'a', d2=5\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call2i" ; return } + timeout { fail "(timeout) continue to call2i" ; return } + } + + pass "locate actual args, mixed integral and float types" +} + +# +# Locate actual args; dereference pointers to ints and floats. +# + +proc pointer_args {} { + global prompt + global hex + global det_file + + delete_breakpoints + + send "break call3a\n" ; expect -re ".*$prompt $" + send "break call3b\n" ; expect -re ".*$prompt $" + send "break call3c\n" ; expect -re ".*$prompt $" + + # Run; should stop at call3a and print actual arguments. + # Try dereferencing the arguments. + + send "run\n" + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".* call3a \[(\]+cp=$hex \"a\", sp=$hex, ip=$hex, lp=$hex\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "run to call3a" ; return } + timeout { fail "(timeout) run to call3a" ; return } + } + + send "print *cp\n" + expect { + -re ".* = 97 'a'\r\n$prompt $" {} + -re "$prompt $" { fail "print *cp" ; return } + timeout { fail "(timeout) print *cp" ; return } + } + send "print *sp\n" + expect { + -re ".* = 1\r\n$prompt $" {} + -re "$prompt $" { fail "print *sp" ; return } + timeout { fail "(timeout) print *sp" ; return } + } + send "print *ip\n" + expect { + -re ".* = 2\r\n$prompt $" {} + -re "$prompt $" { fail "print *ip" ; return } + timeout { fail "(timeout) print *ip" ; return } + } + send "print *lp\n" + expect { + -re ".* = 3\r\n$prompt $" {} + -re "$prompt $" { fail "print *lp" ; return } + timeout { fail "(timeout) print *lp" ; return } + } + + # Continue; should stop at call3b and print actual arguments. + # Try dereferencing the arguments. + + send "cont\n" + expect { + -re ".* call3b \[(\]+ucp=$hex \"b\", usp=$hex, uip=$hex, ulp=$hex\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call3b" ; return } + timeout { fail "(timeout) continue to call3b" ; return } + } + + send "print *ucp\n" + expect { + -re ".* = 98 'b'\r\n$prompt $" {} + -re "$prompt $" { fail "print *ucp" ; return } + timeout { fail "(timeout) print *ucp" ; return } + } + send "print *usp\n" + expect { + -re ".* = 6\r\n$prompt $" {} + -re "$prompt $" { fail "print *usp" ; return } + timeout { fail "(timeout) print *usp" ; return } + } + send "print *uip\n" + expect { + -re ".* = 7\r\n$prompt $" {} + -re "$prompt $" { fail "print *uip" ; return } + timeout { fail "(timeout) print *uip" ; return } + } + send "print *ulp\n" + expect { + -re ".* = 8\r\n$prompt $" {} + -re "$prompt $" { fail "print *ulp" ; return } + timeout { fail "(timeout) print *ulp" ; return } + } + + # Continue; should stop at call3c and print actual arguments. + # Try dereferencing the arguments. + + send "cont\n" + expect { + -re ".* call3c \[(\]+fp=$hex, dp=$hex\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call3c" ; return } + timeout { fail "(timeout) continue to call3c" ; return } + } + + send "print *fp\n" + expect { + -re ".* = 4\r\n$prompt $" {} + -re "$prompt $" { fail "print *fp" ; return } + timeout { fail "(timeout) print *fp" ; return } + } + send "print *dp\n" + expect { + -re ".* = 5\r\n$prompt $" {} + -re "$prompt $" { fail "print *dp" ; return } + timeout { fail "(timeout) print *dp" ; return } + } + + pass "locate actual args, pointer types" +} + +# +# Locate actual args; structures and unions passed by reference. +# + +proc structs_by_reference {} { + global prompt + global hex + global det_file + + delete_breakpoints + + send "break call4a\n" ; expect -re ".*$prompt $" + send "break call4b\n" ; expect -re ".*$prompt $" + + # Run; should stop at call4a and print actual arguments. + # Try dereferencing the arguments. + + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".* call4a \[(\]+stp=$hex\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "run to call4a" ; return } + timeout { fail "(timeout) run to call4a" ; return } + } + + send "print *stp\n" + expect { + -re ".* = \{s1 = 101, s2 = 102\}\r\n$prompt $" {} + -re "$prompt $" { fail "print *stp" ; return } + timeout { fail "(timeout) print *stp" ; return } + } + + # Continue; should stop at call4b and print actual arguments. + # Try dereferencing the arguments. + + send "cont\n" + expect { + -re ".* call4b \[(\]+unp=$hex\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call4b" ; return } + timeout { fail "(timeout) continue to call4b" ; return } + } + + send "print *unp\n" + expect { + -re ".* = \{u1 = 1, u2 = 1\}\r\n$prompt $" {} + -re "$prompt $" { fail "print *unp" ; return } + timeout { fail "(timeout) print *unp" ; return } + } + + pass "locate actual args, structs/unions passed by reference" +} + +# +# Locate actual args; structures and unions passed by value. +# + +proc structs_by_value {} { + global prompt + global hex + global det_file + + delete_breakpoints + + send "break call5a\n" ; expect -re ".*$prompt $" + send "break call5b\n" ; expect -re ".*$prompt $" + + # Run; should stop at call5a and print actual arguments. + # Try dereferencing the arguments. + + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".* call5a \[(\]+st=\{s1 = 101, s2 = 102\}\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "run to call5a" ; return } + timeout { fail "(timeout) run to call5a" ; return } + } + + send "print st\n" + expect { + -re ".* = \{s1 = 101, s2 = 102\}\r\n$prompt $" {} + -re "$prompt $" { fail "print st" ; return } + timeout { fail "(timeout) print st" ; return } + } + + # Continue; should stop at call5b and print actual arguments. + # Try dereferencing the arguments. + + send "cont\n" + expect { + -re ".* call5b \[(\]+un=\{u1 = 2, u2 = 2\}\[)\]+ .*$prompt $" {} + -re "$prompt $" { fail "continue to call5b" ; return } + timeout { fail "(timeout) continue to call5b" ; return } + } + + send "print un\n" + expect { + -re ".* = \{u1 = 2, u2 = 2\}\r\n$prompt $" {} + -re "$prompt $" { fail "print un" ; return } + timeout { fail "(timeout) print un" ; return } + } + + pass "locate actual args, structs/unions passed by value" +} + +# +# Locate actual args; discard, shuffle, and call +# + +proc discard_and_shuffle {} { + global prompt + global hex + global decimal + global det_file + + delete_breakpoints + + send "break call6a\n" ; expect -re ".*$prompt $" + send "break call6b\n" ; expect -re ".*$prompt $" + send "break call6c\n" ; expect -re ".*$prompt $" + send "break call6d\n" ; expect -re ".*$prompt $" + send "break call6e\n" ; expect -re ".*$prompt $" + send "break call6f\n" ; expect -re ".*$prompt $" + send "break call6g\n" ; expect -re ".*$prompt $" + send "break call6h\n" ; expect -re ".*$prompt $" + send "break call6i\n" ; expect -re ".*$prompt $" + send "break call6j\n" ; expect -re ".*$prompt $" + send "break call6k\n" ; expect -re ".*$prompt $" + + # Run; should stop at call6a and print actual arguments. + # Print backtrace. + + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".*Breakpoint $decimal, call6a .*$prompt $" {} + -re "$prompt $" { fail "run to call6a" ; return } + timeout { fail "(timeout) run to call6a" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6a" ; return } + timeout { fail "(timeout) backtrace from call6a" ; return } + } + + # Continue; should stop at call6b and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6b .*$prompt $" {} + -re "$prompt $" { fail "continue to call6b" ; return } + timeout { fail "(timeout) continue to call6b" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6b" ; return } + timeout { fail "(timeout) backtrace from call6b" ; return } + } + + # Continue; should stop at call6c and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6c .*$prompt $" {} + -re "$prompt $" { fail "continue to call6c" ; return } + timeout { fail "(timeout) continue to call6c" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6c" ; return } + timeout { fail "(timeout) backtrace from call6c" ; return } + } + + # Continue; should stop at call6d and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6d .*$prompt $" {} + -re "$prompt $" { fail "continue to call6d" ; return } + timeout { fail "(timeout) continue to call6d" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6d" ; return } + timeout { fail "(timeout) backtrace from call6d" ; return } + } + + # Continue; should stop at call6e and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6e .*$prompt $" {} + -re "$prompt $" { fail "continue to call6e" ; return } + timeout { fail "(timeout) continue to call6e" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6e \[(\]+f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6e" ; return } + timeout { fail "(timeout) backtrace from call6e" ; return } + } + + # Continue; should stop at call6f and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6f .*$prompt $" {} + -re "$prompt $" { fail "continue to call6f" ; return } + timeout { fail "(timeout) continue to call6f" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6f \[(\]+d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6e \[(\]+f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6f" ; return } + timeout { fail "(timeout) backtrace from call6f" ; return } + } + + # Continue; should stop at call6g and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6g .*$prompt $" {} + -re "$prompt $" { fail "continue to call6g" ; return } + timeout { fail "(timeout) continue to call6g" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6g \[(\]+uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6f \[(\]+d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6e \[(\]+f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6g" ; return } + timeout { fail "(timeout) backtrace from call6g" ; return } + } + + # Continue; should stop at call6h and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6h .*$prompt $" {} + -re "$prompt $" { fail "continue to call6h" ; return } + timeout { fail "(timeout) continue to call6h" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6h \[(\]+us=6, ui=7, ul=8\[)\]+ .*\r +.* call6g \[(\]+uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6f \[(\]+d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6e \[(\]+f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6h" ; return } + timeout { fail "(timeout) backtrace from call6h" ; return } + } + + # Continue; should stop at call6i and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6i .*$prompt $" {} + -re "$prompt $" { fail "continue to call6i" ; return } + timeout { fail "(timeout) continue to call6i" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6i \[(\]+ui=7, ul=8\[)\]+ .*\r +.* call6h \[(\]+us=6, ui=7, ul=8\[)\]+ .*\r +.* call6g \[(\]+uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6f \[(\]+d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6e \[(\]+f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6i" ; return } + timeout { fail "(timeout) backtrace from call6i" ; return } + } + + # Continue; should stop at call6j and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6j .*$prompt $" {} + -re "$prompt $" { fail "continue to call6j" ; return } + timeout { fail "(timeout) continue to call6j" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6j \[(\]+ul=8\[)\]+ .*\r +.* call6i \[(\]+ui=7, ul=8\[)\]+ .*\r +.* call6h \[(\]+us=6, ui=7, ul=8\[)\]+ .*\r +.* call6g \[(\]+uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6f \[(\]+d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6e \[(\]+f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6j" ; return } + timeout { fail "(timeout) backtrace from call6j" ; return } + } + + # Continue; should stop at call6k and print actual arguments. + # Print backtrace. + # This fails on i960-*-vxworks because gdb gets confused by + # breakpoints on adjacent instructions. + setup_xfail "i960-*-vxworks" 1786 + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call6k .*$prompt $" {} + -re "$prompt $" { fail "continue to call6k"; return } + timeout { fail "(timeout) continue to call6k"; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call6k \[(\]+\[)\]+ .*\r +.* call6j \[(\]+ul=8\[)\]+ .*\r +.* call6i \[(\]+ui=7, ul=8\[)\]+ .*\r +.* call6h \[(\]+us=6, ui=7, ul=8\[)\]+ .*\r +.* call6g \[(\]+uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6f \[(\]+d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6e \[(\]+f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6d \[(\]+l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6c \[(\]+i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6b \[(\]+s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* call6a \[(\]+c=97 'a', s=1, i=2, l=3, f=4, d=5, uc=98 'b', us=6, ui=7, ul=8\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call6k" ; return } + timeout { fail "(timeout) backtrace from call6k" ; return } + } + + pass "locate actual args, discard, shuffle, and call" +} + +# +# Locate actual args; shuffle round robin and call +# + +proc shuffle_round_robin {} { + global prompt + global hex + global decimal + global det_file + + delete_breakpoints + + send "break call7a\n" ; expect -re ".*$prompt $" + send "break call7b\n" ; expect -re ".*$prompt $" + send "break call7c\n" ; expect -re ".*$prompt $" + send "break call7d\n" ; expect -re ".*$prompt $" + send "break call7e\n" ; expect -re ".*$prompt $" + send "break call7f\n" ; expect -re ".*$prompt $" + send "break call7g\n" ; expect -re ".*$prompt $" + send "break call7h\n" ; expect -re ".*$prompt $" + send "break call7i\n" ; expect -re ".*$prompt $" + send "break call7j\n" ; expect -re ".*$prompt $" + send "break call7k\n" ; expect -re ".*$prompt $" + + # Run; should stop at call7a and print actual arguments. + # Print backtrace. + + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".*Breakpoint $decimal, call7a .*$prompt $" {} + -re "$prompt $" { fail "run to call7a" ; return } + timeout { fail "(timeout) run to call7a" ; return } + } + + setup_xfail "i960-*-*" 1813 + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7a" ; return } + timeout { fail "(timeout) backtrace from call7a" ; return } + } + + # Continue; should stop at call7b and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7b .*$prompt $" {} + -re "$prompt $" { fail "continue to call7b" ; return } + timeout { fail "(timeout) continue to call7b" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7b" ; return } + timeout { fail "(timeout) backtrace from call7b" ; return } + } + + # Continue; should stop at call7c and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7c .*$prompt $" {} + -re "$prompt $" { fail "continue to call7c" ; return } + timeout { fail "(timeout) continue to call7c" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7c" ; return } + timeout { fail "(timeout) backtrace from call7c" ; return } + } + + # Continue; should stop at call7d and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7d .*$prompt $" {} + -re "$prompt $" { fail "continue to call7d" ; return } + timeout { fail "(timeout) continue to call7d" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7d" ; return } + timeout { fail "(timeout) backtrace from call7d" ; return } + } + + # Continue; should stop at call7e and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re "Breakpoint $decimal, call7e .*$prompt $" {} + -re "$prompt $" { fail "continue to call7e" ; return } + timeout { fail "(timeout) continue to call7e" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7e \[(\]+f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\[)\]+ .*\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7e" ; return } + timeout { fail "(timeout) backtrace from call7e" ; return } + } + + # Continue; should stop at call7f and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7f .*$prompt $" {} + -re "$prompt $" { fail "continue to call7f" ; return } + timeout { fail "(timeout) continue to call7f" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7f \[(\]+uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\[)\]+ .*\r +.* call7e \[(\]+f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\[)\]+ .*\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7f" ; return } + timeout { fail "(timeout) backtrace from call7f" ; return } + } + + # Continue; should stop at call7g and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7g .*$prompt $" {} + -re "$prompt $" { fail "continue to call7g" ; return } + timeout { fail "(timeout) continue to call7g" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7g \[(\]+d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\[)\]+ .*\r +.* call7f \[(\]+uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\[)\]+ .*\r +.* call7e \[(\]+f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\[)\]+ .*\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7g" ; return } + timeout { fail "(timeout) backtrace from call7g" ; return } + } + + # Continue; should stop at call7h and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7h .*$prompt $" {} + -re "$prompt $" { fail "continue to call7h" ; return } + timeout { fail "(timeout) continue to call7h" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7h \[(\]+us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\[)\]+ .*\r +.* call7g \[(\]+d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\[)\]+ .*\r +.* call7f \[(\]+uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\[)\]+ .*\r +.* call7e \[(\]+f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\[)\]+ .*\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7h" ; return } + timeout { fail "(timeout) backtrace from call7h" ; return } + } + + # Continue; should stop at call7i and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7i .*$prompt $" {} + -re "$prompt $" { fail "continue to call7i" ; return } + timeout { fail "(timeout) continue to call7i" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7i \[(\]+ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\[)\]+ .*\r +.* call7h \[(\]+us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\[)\]+ .*\r +.* call7g \[(\]+d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\[)\]+ .*\r +.* call7f \[(\]+uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\[)\]+ .*\r +.* call7e \[(\]+f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\[)\]+ .*\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7i" ; return } + timeout { fail "(timeout) backtrace from call7i" ; return } + } + + # Continue; should stop at call7j and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7j .*$prompt $" {} + -re "$prompt $" { fail "continue to call7j" ; return } + timeout { fail "(timeout) continue to call7j" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7j \[(\]+ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\[)\]+ .*\r +.* call7i \[(\]+ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\[)\]+ .*\r +.* call7h \[(\]+us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\[)\]+ .*\r +.* call7g \[(\]+d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\[)\]+ .*\r +.* call7f \[(\]+uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\[)\]+ .*\r +.* call7e \[(\]+f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\[)\]+ .*\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7j" ; return } + timeout { fail "(timeout) backtrace from call7j" ; return } + } + + # Continue; should stop at call7k and print actual arguments. + # Print backtrace. + + send "continue\n" + expect { + -re ".*Breakpoint $decimal, call7k .*$prompt $" {} + -re "$prompt $" { fail "continue to call7k" ; return } + timeout { fail "(timeout) continue to call7k" ; return } + } + + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* call7k \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* call7j \[(\]+ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8\[)\]+ .*\r +.* call7i \[(\]+ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6\[)\]+ .*\r +.* call7h \[(\]+us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5\[)\]+ .*\r +.* call7g \[(\]+d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b'\[)\]+ .*\r +.* call7f \[(\]+uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3, f=4\[)\]+ .*\r +.* call7e \[(\]+f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1, l=3\[)\]+ .*\r +.* call7d \[(\]+l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2, s=1\[)\]+ .*\r +.* call7c \[(\]+s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a', i=2\[)\]+ .*\r +.* call7b \[(\]+i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7, c=97 'a'\[)\]+ .*\r +.* call7a \[(\]+c=97 'a', i=2, s=1, l=3, f=4, uc=98 'b', d=5, us=6, ul=8, ui=7\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "backtrace from call7k" ; return } + timeout { fail "(timeout) backtrace from call7k" ; return } + } + + pass "locate actual args, shuffle round robin and call" +} + +# +# Locate actual args; recursive passing of structs by value +# + +proc recursive_structs_by_value {} { + global prompt + global hex + global decimal + global det_file + + delete_breakpoints + + send "break hitbottom\n" ; expect -re ".*$prompt $" + + # Run; should stop at hitbottom and print actual arguments. + # Print backtrace. + + send "run\n" + expect { + -re "The program .* has been started already.* \[(\]+y or n\[)\]+ $" { + send "y\n" + exp_continue + } + -re ".*Breakpoint $decimal, hitbottom .*$prompt $" {} + -re "$prompt $" { fail "run to hitbottom" ; return } + timeout { fail "(timeout) run to hitbottom" ; return } + } + + # The a29k fails all of these tests, perhaps because the prologue + # code is broken. + setup_xfail "a29k-*-udi" + send "backtrace 100\n" + expect { + -re "backtrace 100\r +.* hitbottom \[(\]+\[)\]+ .*\r +.* recurse \[(\]+a=\{s = 0, i = 0, l = 0\}, depth=0\[)\]+ .*\r +.* recurse \[(\]+a=\{s = 1, i = 1, l = 1\}, depth=1\[)\]+ .*\r +.* recurse \[(\]+a=\{s = 2, i = 2, l = 2\}, depth=2\[)\]+ .*\r +.* recurse \[(\]+a=\{s = 3, i = 3, l = 3\}, depth=3\[)\]+ .*\r +.* recurse \[(\]+a=\{s = 4, i = 4, l = 4\}, depth=4\[)\]+ .*\r +.* test_struct_args \[(\]+\[)\]+ .*\r +.* main \[(\]+.*\[)\]+ .*\r +$prompt $" {} + -re "$prompt $" { fail "recursive passing of structs by value" ; return } + timeout { fail "(timeout) recursive passing of structs by value" ; return } + } + + pass "locate actual args, recursive structs by value" +} + +proc funcargs_reload { } { + global objdir + global subdir + global binfile + global srcdir + + if [istarget "a29k-*-udi"] then { + # FIXME: If PR 2415 is fixed, this is not needed. + gdb_target_udi + gdb_load $objdir/$subdir/$binfile + } + 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 + } +} + +# +# Test for accessing local stack variables in functions which call alloca +# +proc localvars_after_alloca { } { + global prompt + global hex + global decimal + + if { ! [ runto localvars_after_alloca ] } then { return 0 } + + # Print each arg as a double check to see if we can print + # them here as well as with backtrace. + + gdb_test "print c" " = 97 'a'" + gdb_test "print s" " = 1" + gdb_test "print i" " = 2" + gdb_test "print l" " = 3" + + send "next\n" + expect { + -re ".*$prompt $" {} + timeout { fail "next in localvars_after_alloca()" ; return } + } + + # Print each arg as a double check to see if we can print + # them here as well as with backtrace. + + gdb_test "print c" " = 97 'a'" + gdb_test "print s" " = 1" + gdb_test "print i" " = 2" + gdb_test "print l" " = 3" + + gdb_test "backtrace 8" "#0.*localvars_after_alloca \[(\]+c=97 'a', s=1, i=2, l=3\[)\]+.*#1.*main" "backtrace after alloca" +} + +# +# Test for accessing local stack variables, backtraces, finish, +# and finally stepping into indirect calls. The point is that on the PA +# these use a funky `dyncall' mechanism which GDB needs to know about. +# +proc localvars_in_indirect_call { } { + global prompt + global hex + global decimal + + # Can not use "runto call0a" as call0a is called several times + # during single run. Instead stop in a marker function and + # take control from there. + if { ! [ runto marker_indirect_call ] } then { return 0 } + + # break on the next call to call0a, then delete all the breakpoints + # and start testing. + gdb_test "break call0a" "Breakpoint .*" + gdb_test "continue" "call0a .*" + delete_breakpoints + + # Print each arg as a double check to see if we can print + # them here as well as with backtrace. + + gdb_test "print c" " = 97 'a'" + gdb_test "print s" " = 1" + gdb_test "print i" " = 2" + gdb_test "print l" " = 3" + + gdb_test "backtrace 8" "#0.*call0a \[(\]+c=97 'a', s=1, i=2, l=3\[)\]+.*#1.*main" "backtrace in indirectly called function" + + # + # "finish" brings us back to main. We then will try to step through + # the second indirect call. + # On some targets (e.g. m68k) gdb will stop from the finish in midline + # of the first indirect call. This is due to stack adjustment instructions + # after the indirect call. In these cases we will step till we hit the + # second indirect call. + # + + send "finish\n" + expect { + -re "\[(\]+\[*\]+pointer_to_call0a\[)\]+ \[(\]+c, s, i, l\[)\]+;.*First.*$prompt $" { + send "step\n" + exp_continue + } + -re "\[(\]+\[*\]+pointer_to_call0a\[)\]+ \[(\]+c, s, i, l\[)\]+;.*Second.*$prompt $" { + pass "finish from indirectly called function" + } + default { fail "finish from indirectly called function" ; return } + } + + gdb_test "step" "call0a \[(\]+c=97 'a', s=1, i=2, l=3\[)\]+" \ + "stepping into indirectly called function" +} + +# Start with a fresh gdb. +# +# Test for stepping into indirect calls which may have trampolines (possibly +# cascaded) on both the call path and the return path. +# to handle trampolines. +# +proc test_stepping_over_trampolines { } { + global prompt + global hex + global decimal + + # Stop in a marker function and take control from there. + if { ! [ runto marker_call_with_trampolines ] } then { return 0 } + + # Cater for gdb stopping in midline, see comment for finish above. + send "finish\n" + expect { + -re "marker_call_with_trampolines ..;.*$prompt $" { + send "step\n" + exp_continue + } + -re "pointer_to_call_with_trampolines.*$prompt $" { + pass "finish from marker_call_with_trampolines" + } + -re ".*$prompt $" { + fail "finish from marker_call_with_trampolines" + } + default { fail "finish from marker_call_with_trampolines" ; return 0 } + } + + # Try to step into the target function. + gdb_test "step" "call_with_trampolines \[(\]+d1=5\[)\]+" \ + "stepping into function called with trampolines" + + # Make we can backtrace and the argument looks correct. */ + gdb_test "backtrace 8" "#0.*call_with_trampolines \[(\]+d1=5\[)\]+.*1.*main" "backtrace through call with trampolines" + + # Make sure we can get back to main. + # Stepping back to main might stop again after the return statement + # or immediately transfer control back to main if optimizations + # are performed. + send "step\n" + expect { + -re "main .* at.*$prompt $" { + pass "stepping back to main from function called with trampolines" ; + return 1 + } + -re "\}.*End of call_with_trampolines.*$prompt $" { + send "step\n" + exp_continue + } + -re ".*$prompt $" { + fail "stepping back to main from function called with trampolines" + } + default { fail "stepping back to main from function called with trampolines" ; return 0 } + } +} + +# Start with a fresh gdb. + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load $objdir/$subdir/$binfile + +set oldtimeout $timeout +set timeout 120 + +integral_args +funcargs_reload +unsigned_integral_args +funcargs_reload +float_and_integral_args +funcargs_reload +pointer_args +funcargs_reload +structs_by_reference +funcargs_reload +structs_by_value +funcargs_reload +discard_and_shuffle +funcargs_reload +shuffle_round_robin +funcargs_reload +recursive_structs_by_value +funcargs_reload +localvars_after_alloca +funcargs_reload +localvars_in_indirect_call +funcargs_reload +test_stepping_over_trampolines + +if [istarget "a29k-*-udi"] then { + # FIXME: If PR 2415 is fixed, this is not needed. + gdb_target_udi +} + +catch "set timeout $oldtimeout" diff --git a/gdb/testsuite/gdb.base/hppa.mt b/gdb/testsuite/gdb.base/hppa.mt new file mode 100644 index 0000000..24232b2 --- /dev/null +++ b/gdb/testsuite/gdb.base/hppa.mt @@ -0,0 +1,3 @@ +# Force static linking for nodebug +LDFLAGS= -Wl,-a,archive + diff --git a/gdb/testsuite/gdb.base/i486-elf.u b/gdb/testsuite/gdb.base/i486-elf.u new file mode 100644 index 0000000..882338b --- /dev/null +++ b/gdb/testsuite/gdb.base/i486-elf.u @@ -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 diff --git a/gdb/testsuite/gdb.base/i860-elf.u b/gdb/testsuite/gdb.base/i860-elf.u new file mode 100644 index 0000000..216e83b --- /dev/null +++ b/gdb/testsuite/gdb.base/i860-elf.u @@ -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 diff --git a/gdb/testsuite/gdb.base/interrupt.c b/gdb/testsuite/gdb.base/interrupt.c new file mode 100644 index 0000000..bafbaa5 --- /dev/null +++ b/gdb/testsuite/gdb.base/interrupt.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/list0.c b/gdb/testsuite/gdb.base/list0.c new file mode 100644 index 0000000..d888870 --- /dev/null +++ b/gdb/testsuite/gdb.base/list0.c @@ -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 */ +} diff --git a/gdb/testsuite/gdb.base/list0.h b/gdb/testsuite/gdb.base/list0.h new file mode 100644 index 0000000..c4d337c --- /dev/null +++ b/gdb/testsuite/gdb.base/list0.h @@ -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++); +} diff --git a/gdb/testsuite/gdb.base/list1.c b/gdb/testsuite/gdb.base/list1.c new file mode 100644 index 0000000..0b362a4 --- /dev/null +++ b/gdb/testsuite/gdb.base/list1.c @@ -0,0 +1,12 @@ +void +bar (x) +int x; +{ + printf ("%d\n", x); +} + +static void +unused () +{ + /* Not used for anything */ +} diff --git a/gdb/testsuite/gdb.base/m68k-aout.u b/gdb/testsuite/gdb.base/m68k-aout.u new file mode 100644 index 0000000..3095fc0 --- /dev/null +++ b/gdb/testsuite/gdb.base/m68k-aout.u @@ -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 diff --git a/gdb/testsuite/gdb.base/m68k-aout2.u b/gdb/testsuite/gdb.base/m68k-aout2.u new file mode 100644 index 0000000..b920961 --- /dev/null +++ b/gdb/testsuite/gdb.base/m68k-aout2.u @@ -0,0 +1,2208 @@ +begin 777 m68k-aout2 +M 0(!"P @ , 'B0 " @ !-^ )!='[P $(@+E +M@4GS& 0CS " !*N0 (@9G &80 *DA42%,O DZY BF$ZY C9M[\ +M PO $ZY F0%B/+P!.N0 )MA.5O_(2.<P $AZ :Q(> 2'H!BDZZ 3;? +M_ @M0/_P2'@ ($AN_\@O $ZZ 3S?_ ! ,@ "!G"$'Z 79@ $T +M#&X!"__*9O D/ '__4KO_, H+__@ !H( @ ( +0KO_0T*[_U$AZ 6)( +M> +R[_\"\Z 9@O.@&@+P!(> 3KH S-_\ &"U _^@O+O_,+R[_\"\Z +M 7@O.@%X+R[_T" "T*[_Z"\ 3KH HM_\ &"8 E*[_S"\"("[_Z-"N_\PO +M $ZZ )#?_ Q(>@$B2'@ $AZ ,E.N@!F4(\M0/_L2J[_U&8$6(]@(DAX +M O "\Z 1@O.@$8+R[_U-:N_] O TZZ $3?_ !Q!^O[(+4C__"UY ( +M /_X+7H ;/_T2&[_Z$AX $@;O_HT>[_W$Z04(],WP ,3EY.=2!O Q(> % +M8!P@;P <2'@ 1V 2(&\ #$AX $E@""!O !!(> #3D!E DYU+QA(4$AX )( +M> 2'@ !$Y +WP !_ 1(> !3D +W5S<B]L:6(O;&0N<V\ +V1E +M=B]Z97)O 88W)T,#H@;F\@+W5S<B]L:6(O;&0N<V\* )6-R=# Z +M("]U<W(O;&EB+VQD+G-O(&UA<'!I;F<@9F%I;'5R90H $V-R=# Z(&YO +M("]D978O>F5R;PH @ H !( ' !0 $[Y ER 3E8 +M $* 8 DY>3G5.5@ 0H!@ "3EY.=4Y6 !"@& ).7DYU3E8 $* +M8 DY>3G5.5@ 0H!@ "3EY.=4Y6 !"@& ).7DYU3E8 $* 8 +M DY>3G5.5@ 0H!@ "3EY.=4Y6 !"@& ).7DYU3E8 $* 8 DY> +M3G5.5@ 0H!@ "3EY.=4Y6 !"@& ).7DYU3E8 ' 8 DY>3G5. +M5@ < !R & ).7DYU3E8 &'_ "0D(Y *P4!/\ $ K!2$_P @ " +ML%0S_ # *P5C/\ 0 K!8,_P !0 "L%IP!B/ *P7' '(\ K!@< @C +MP "L&1P"2/ *P:' *(\ K!L< LCP "L' C_$+( K!T(_Q :0 +M *P>$*Y *P?!/Y *P4 "L( 3^0 "L%( K""$_D K!4 *PA#/Y *P +M5@ "L(@S^0 "L%@ K",,_D K!: *PD"/Y *P7 "L)@C^0 "L& K"@ +M(_D K!D *PJ"/Y *P: "L+ C^0 "L&P K"X(_D K!P *PP"/Y *P +M= "L,@C^0 "L'@ K#0(_D K!\ *PU"/\ *P4 "L. C_ "L%( K#D +M(_P K!4 *PZ"/\ *P5@ "L.PC_ "L%@ K#P(_P K!: *P]"/\ *P +M7 "L/@C_ "L& K#\(_P K!D *Q "/\ *P: "L00C_ "L&P K$( +M(_P K!P *Q#"/\ *P= "L1 C_ "L'@ K$4< (CP "L1@CP "L1QP +M 2/ *Q("/ *Q)"/Y *Q* "L3 S^0 "L< K'(3EY.=0 3E8 "\+ +M+PI"@$'Y *R#$J09PA82%* 2I!F^$J ;Q1'^0 "L@A%\PP (%).D%E*M\IM +M]B1N__@F;O_\3EY.=4Y6 O"D7Y *R%$J29P@@6DZ02I)F^$*G2'D "5 +M8?\ #F)&[__$Y>3G5.5@ 2KD @ \9@IP 2/ ( /&&\3EY.=4CG@,!. +MN0 *\A*0&<,3KD "MH3-\# 4YU2'@ /4AZ !9(> "3KD ";.2'@ 8TZY +M FV$U#-C@X.#$@9FQO871I;F<@<&]I;G0@;F]T(&%V86EL86)L92 M+2!P +M<F]G<F%M(')E<75I<F5S(&ET"@ $Y6__A(UR" +BX "& 4(^T " " +MLA@O+0 $+P<@54Z04$\J>0 "LAA*C6;B3KD ";P+P=.N0 )MA83TSN((#_ +M^$Y>3G4 $Y6__PNC4AX Q.N0 +PA83RI 2HUF!'#_8!HJK@ (*VX # $ +M*WD K(8 @CS0 "LAAP "IN__Q.7DYU !.^0 )N!(> $3D!E\DYU2'@ +M 4Y CP " $1P_TYU 3E8 $AY G!DZY W(%A/3EY.=4Y6 +M__A(UR" *FX "'[_2HUG<# M ! "@ 0-G.C M ! ( &9C P+0 0" +M F<$?@!@#$A53KD ">46$\N ! M !))P"\ 3KD #AV6$]*@&P"?O\P+0 0 +M" V<0+RT "$ZY P'EA/0JT "$)M !!"E2MM @ !$*M P@!TSN((#_ +M^$Y>3G5.5O_\+HTJ;@ (,"T $ @ %F)F \,"T $ @ %G)$JM AG'B M +M 2PK0 (8Q1(54ZY I8EA/,"T $ @ )GTC M ! ( %9P1P_V "< J +M;O_\3EY.=4Y6_^Q(UR# *FX #!PN LP+0 0 H "2#( ""9CP@+0 ( +MT*T #+"M 1C "\(&T !%)(*T@ !!%&__\,!@ *9@ !'DA53KD "EB6$]^ +M_["'9@ !#& 00P+0 0?A; AWX&L(=F,!U&__]"E4AX %(;O__$"T $DG +M+P!.N0 )LY^ ;"'9P U@!M " $'#_8 SC M !!^$L"'?@*PAV8@2JT +M"&<:("T !+"M AF)$J59B P+0 0 H "$9A1(54ZY IYEA/2H!G!G#_ +M8 C# M ! "@ (1F /\F2%5.N0 *6)83U.5;1 @;0 $4D@K2 $$4;_ +M_V!,,"T $ @ =G,B 51("PK0 ,;"@@;0 $$(8,!@ *9Q @;0 $4D@K2 $ +M$"C__V <2%4@;0 $< 0$& &2%5P ! &+P!.N0 )_!03S M ! ( %9P1P +M_V $< 0!DSN(,#_[$Y>3G5.5O_P2-<PP"IN @H;0 (+"T !)R,*TP !# M +M ! "@ (1G!'X 8 0N+0 ,*H=*E6P$?@!@ BX5("T "-"M R0K0 $L(=L +M"DA53KD "M 6$]*AF\@+P9(5! M !))P"\ 3KD ";.O(!G"@!M " $'#_ +M8 )P $SN,,#_\$Y>3G5.5O_X2-<@@"IN @P+0 0?A+ AWX"L(=G'C M ! " +M@ 0)F!'#_8&AP[\!M !!R H!!.T $# M ! ( &9DY*K0 (9@I(54ZY +M J@EA/("T !+"M AF-# M ! "@ (1F*"JM Q*E6P$?@!@ BX5("T +M"-"M R0K0 $L(=L"DA53KD "M 6$]P $SN((#_^$Y>3G5.5O^T2-<@P"IN +M @0+0 22< L # M ! ( "9Q8@>0 " I1!\&X *T@ "'X(*T< #&!Z+P9. +MN0 -7!83TJ 9PX ;0" ! N/ (!@'DAN_\0O!DZY XAE!/2H!M!BXN +M__!N!BX\ $ " '4( O $ZY O"%A/*T "&<, &T " 0*T< #& @('D +M @*40?!N "M( A^""M' P";?]_ ! ;0 $ ! K;0 ( 1,[B# _[1.7DYU +M3E;_]")N @@:0 (T>D #" (D*D !&H&(T@ !& &L)%L B* 3EY.=4CGP, @ +M.0 " $P,0 $9@8P/ 28"0,0 #9@8P/ .8!@,0 "9@8P/ *8 P,0 ! +M9@8P/ &3G%!^0 "JZQ@!B-Q B)8L_P 9O!.0DS? P-.=0 +M $[Y KZ 3E8 '(!(\$ K(<(&X $%RH Q.7DYU3E;_Y"Z'2KD @!8 +M9QH,N0 ( @!89@ Q'X#(\< @!,8 N"U\ KT/_T0J[_^$*N__Q( +M;O_H2&[_]$AX =.N0 -Z!/[P ,0KD K(<3KD #H82&[_]$AN_^A(> ' +M3KD #>@3^\ #$JY *R'&<$?@%@ GX"(\< @!8#+D " ( 6&9.?@,C +MQP " $Q.N0 .C!*@&8V2'D "S@2'D @+$3KD #EP4$](>0 +2!(>0 " +M L1.N0 .7!03TAY ("Q$ZY GE%A/3KD #H8#+D " ( 6&8$< %@ +M G +B[_Y$Y>3G4*(%!L96%S92!N;W1E.B!-0S8X.#@Q('5P9W)A9&4@=&\@ +M03DS3B!M87-K(&UA>2!B92!A9'9I<V%B;&4N( H 4V5E($9L;V%T:6YG+5!O +M:6YT(%!R;V=R86UM97(G<R!'=6ED92X* $Y6_^Q(US#@*'P @"P*E0J+@ , +M+"X "& 0O*T "&0$*$U@!$GM 0J5$J-9@1^ & $+BT #+Z%9.!.N0 -(0N +M &=$*(<@1T*00J@ !"%& @A10 ,($8@A2A'6(=*C6<>O*T "&,,*(U)[0 $ +M*FT !& (($<@C2X-*E5*C6;BF\T@1R"-*(U,[C#@_^Q.7DYU3E;_Z$C7,/ J +M;@ (*%4L%&8$> !@!B!&*"@ #"XL 1F!'H 8 8@1RHH R\AV=TN(5E.$J& +M9VA*A&8:($8@* (6( O $AY ( \$ZY U7%!/8$XJAEB&*D8L%68$> !@ +M/"!&*"@ #& T2H=G,$J%9AH@1R H A8@"\ 2'D @$$3KD #5<4$]@%BJ' +M*D<N%68$>@!@!B!'*B@ #+R'9HQ"E4A43KD #5"6$],[C#P_^A.7DYU3E;_ +MY$C7,( J;@ ((%5*B&8$< !@!" H PH4")H 1*C&8$?@!@)BXL Q@(+Z! +M918JC$OL 0H54J,9@1^ & 8+BP #& 2*HDJ22)52HEF!'( 8 0B*0 ,OH!B +MT+* 8LPJB"",(4D !$SN,(#_Y$Y>3G5.5O_D2-<P^"@N A8A'X(N(=D!'@( +M8 96A.2,Y8Q*N0 " +!F!'H 8 H@>0 " + J* ,NH1D%"\$3KD #/(6$]* +M@&8&< !@ #"*'P @"P*E1@(+Z&8@R^A&042>T !"I#8!"\A&4(2>T !"I# +M8 0H32I%*A4F+0 $2H5F!'X 8 8@12XH Q*@V8$? !@!B!#+"@ #+Z$9+J\ +MA&2V("T #)"$?@BPAV(0*BT "$A43KD "W:6$]@+BHM @N!=Z$($4F$):$ +M*T, #"!'((-2N0 " '0K1P (2%1.N0 +I183R!%((0@12 0T;D @"D4KD +M @"HN+D @"89 92N0 " 'A8A2 %3.XP^/_D3EY.=4Y6_^!(US#\)"X "! " +M?@/ AV<6+P)(>0 " 1A.N0 -5Q03W 8 \+2Y ( M&4(M+D @"X8PY^ +M%B/' ( 1' 8 TBP"688@1B@0F;D @"D4[D @"H*'P @"P*E1*C6< +M *(N+0 ()BT #+R'9#@J!MJ$NH=F%-B#4[D @!T2%1.N0 +=I83V!PNH=C +M%"\'+P9(>0 " 5=.N0 -5QP &!N*$U@5+R'8SPJ!]J#NH9F%BP'V(-3N0 " +M '1(5$ZY MVEA/8#*ZAF,4+P)(>0 " 79.N0 -5Q03W 8#!)[0 $8!0O +M DAY (!F$ZY U7%!/< !@%BI42HUF /]B+P0O!DZY M2%!/< %,[C#\ +M_^!.7DYU3E;_\$C7,, H;@ (+"X $"XN R>AG((OH%E($OT: JARB&4KD +M @!T4KD @"H2&T !$ZY P'EA/6$P@#$SN,,#_\$Y>3G5.5O_@2-<X^"IN +M @@#7X#P(=F$+OY ( M&4(N_D @"X8Q9(54AY (!NDZY U7%!/< !@ +M #T1^W__"@30?-( "P(2'@ 2\$2%-.N0 ,L!/[P ,?O^PAV8&< !@ #* +M+BX #%B'>@B^A60$=@A@"%:'Y(_ECR8'N(-E$"\#+P1(4TZY Q0& )Z\ +MN0 " +AD8BA\ ( L"I4($8J$& *2>T !& "*$TJ5$J-9@1^ & $+BT #+Z% +M93HN+0 (O(=EY+R'8MHN!-Z%OH-E)DA43KD "W:6$]3N0 " '3;N0 " *0F +MAR\#+P=(4TZY Q0& R+RX #$ZY O"%A/*D!*C6<>6$M9A"\$2%5(4TZY +M ]"$_O Q(4TZY P'EA/( U,[CCX_^!.7DYU3E;_Y$C7/. J+@ ,+"X +M""1&U<4F? " +!@""9-8 1'[0 $*E-*C68$?@!@!"XM R^A64 ,8H;0 ( +MO(QF'$A33KD "W:6$_;N0 " *12N0 " *AP 6 *2\C&6\+@S>E+R'9+BU +MQV,:2JX $&<0+P9(>0 " D=.N0 -5Q03W#_8'BUQV8N2%-.N0 +=I83U*Y +M ( =-NY ( I%2Y ( J)N42&P !$ZY P'EA/< %@1DA33KD "W:6$]4 +MN0 " '0@%-&Y ( I%:Y ( J" 'D(:1E)Z*)(=(; $3KD # >6$](:@ $ +M3KD # >6$]P 6 "< !,[CS@_^1.7DYU3E;_]$C7(,!*N0 " &QF(DZY X +MIB/ ( ;$ZY TA"I 2HUG.DA53KD #5"6$\N.0 " &Q3A]ZN A,>7 ' +M ( ;$PY< < @!L+ <O!DZY XX%A/*D!R_[O!9@1P &!,2KD @"T9@8C +MS0 " +1!]6@ (\@ @"X*H<@.0 " +B0N0 " +0CP " '#?N0 " *12N0 " +M '12N0 " *A(;0 $3KD # >6$]P 4SN(,#_]$Y>3G5.5O_X2-<@@$JY ( +MQ&<6*GD @#$('D @#$(] @#$8 CDJY ( P&YP+CP " $+P=.N0 +M..!83RI <O^P@6822'D @)Y3KD #5<6$]P &!<2KD @"T9@8CS0 " +0J +MAT'M 0CR " +PC_ @ @# 0?5X "/( ( N" Y ( N)"Y ( M"/ +M ( <-^Y ( K%.Y ( P"IY ( O'X0W[D @"\( U,[B" __A.7DYU3E8 +M "!N @@N0 " ,0C[@ ( ( Q$Y>3G5.5@ <A8CP0 " $1.7DYU $Y6 +M_^@NARXY ( 1$AN_^Q(>4 25 $O+@ (3KD #BV2H!L"B/' ( 1' 8 )P +M 2XN_^A.7DYU3E;__"Z-2KD JZL9C@J? " IPP+0 0 H $#9@0@#6!H +M2^T %+O\ (%'&7D3KD #8\2H!F#'(,(\$ @!$< !@1BIY *NK$J59R0@ +M53 H ! "@ 0-G%EA-N_D JZP9>1R&"/! ( 1' 8!A*E6822'@ %$AX +M %.N0 /9!03RJ (!4J;O_\3EY.=4Y6__A(UR" 3KD #B6+@!(> $+P=. +MN0 /9!03R/ *NK$JY *NK&8$< !@7" 'YX O $ZY O"%A/(\ @*4 +M9A@O.0 "KJQ.N0 ,!Y83T*Y *NK' 8"X@>0 "KJQ!\'P (\@ JZP+CP +M @*<*GD JZL8 8JQW(4WH$,AP "!1QE\G !3.X@@/_X3EY.=4Y6__PNC4JY +M *NK&8*3KD #8\2H!G+BIY *NK+OY *NL&0@2I5F$DAX !1(> !3KD +M #V04$\J@%A-N_D JZP9> J;O_\3EY.=4Y6__PNC4JN AG9DJY *NK&8J +M*GP @*<,"T $ * ! V<*2%4@;@ (3I!83TOM !2[_ "!1QD-F#<*GD +M JZLN_D JZP9"9*E6<8(%4P* 0 H $#9PHO%2!N A.D%A/6$V[^0 " +MKK!EVBIN__Q.7DYU 3E;_V$C7/. N+@ (;P9\(+Z&;09^%F *8D +M;@ 0+"X #" '4X!R >&A+P%.N0 .,983RH 2_D K(@2_5\ "952%(O!B\' +M3KD #EF3^\ #$J :U9*AF<V0>[_]")&(-D@V2#92>[_]"P49PYR ;R!9P@J +MABB\ Y&$*G2%0O!TZY Y9D_O Q*@&L<2HIG"@R2 Y&&8")(LO!4ZY +M XUEA/< !@&BXY ( 1"\%3KD #C66$\JBR/' ( 1'#_3.X\X/_83EY. +M=4[Y FX$AX 9.0&7R3G5.^0 )N!(> ^3D!E\DYU3OD ";@2'@ 64Y +M9?).=4[Y FX$AX $!.0&7R3G5.^0 )N!(> V3D!E\DYU3OD ";@2'@ +M;4Y 9?).=4[Y FX$AX &Y.0&7R3G4@+P $5H!R_,"!T+D @4<+T !$AX +M !%.0&40(#D @4<(^\ ! "!1Q.=4[Y FX $CGP,!.N0 .G @ +M+P$0Y8@@? "LB @< @ +R\!'"\O 1PO+P$<+R\!'$Z0W_P 03KD #JX +M3-\# ]_\ "$AX (M.0$[Y FX$AX &Q.0&7R3G5.5OOX2-<@@"IN A! +M[@ 0+@@P+0 0" 686,"T $ @ AG" !M ( $& $</]@:C M ! ( " +M9TX";?_[ !!![OP *T@ "$'N_ K2 $*WP 0 Q(52\'+RX #$ZY ] +MX$_O PN $A53KD ">46$\ ;0 $ !!"K0 (0JT #$*58!!(52\'+RX #$ZY +M ]X"X ( =,[B" ^_A.7DYU #R.IP 1.=0 #R +M.E04 "CR &0 #( E@ 9A;R.E0 ![R &0 #( @ 9@1P 6 "0H!.=3_P +M !. ____X G_P #\+R\ _$'O 0@* $0(, ,0 (9RP@ +M.0 " $P@P Q 1F"$ZY [YF 6#$ V8(3KD #KZ8 @,0 "9@)A6DYU +M0>\ !" 8#$ "&<J(!@,0 $9@A.N0 /&!@&@Q -F"$ZY [!F ,#$ +M F8&3KD #MV+U<! -_\ ! $YU\A#PP/(HO &$YU\AC0P/(0G !.=2)Y +M (%U# I__X( .9P@Q?!!C "!@(DII__YJZ$AH " O/$ " O.0 "LJ!. +MN0 .+;?_ PS?!!C__PS?!! __P@D2%1 0A40 ((5$ #"%1 ! A40 4 +M(5$ &"%1 !Q.=2)Y (%U# I__X( .9P)@(DII__YJ[DAH "0O/$ " O +M.0 "LJ!.N0 .+;?_ PS?!!C__PS?!!!__PBD"*H 0BJ ((J@ #"*H +M ! BJ 4(J@ &"*H !PP*?_^" #F?V,V@ (/_\3G7R$/# T?P 8\AB\ +M ")\X /%"#9(-D@V2#9(-D@V2#9(-D@V2#9(-DC_ #@ ^$(GS@ X +M(-D@V2#9(-D@V2#9(-D@V2)\X "-\ \<(WP #Q0C? (( +MT/(\B \CR0 !.=2/\ . #X3R&-# \AB< -'\ +")\ +MX , "+8(M@BV"+8(M@BV"+8(MB1_ $PB?. #Q0BV"+8(M@B?. @ +M* 8 H /(T (T"-H !P)6"-\ G$(!!!Z (3KD #S>("C__$'H +M A.N0 /-Y.=4A " #V8: D ?_".0 !(0 @ ]F"@) '_PCJ $ !. +M=0 "!O 0B;P (("\ #&],(@F2B&P 1$@;* ;0 0#((" $ &<$ +M$MA3@"()" $ &8>(@#DB& "(MA1R/_\0D!3@&3T( $"@ -@ A+84<C_ +M_$) 4X!D]$YUL\AN$& "$MA1R/_\0D!3@&3T3G71P-/ 8 (3(%'(__Q"0%. +M9/1.=0 !.5O_X2-< P"PN A,+F & PO!DZY O"%A/+@!F!' 8 XO +M!B\'3KD $_X4$\@!TSN ,#_^$Y>3G5.5@ +RX "$ZY P'EA/3EY.=4Y6 +M]H!(USS\3KD %XV($ @4!U0__]"KO_X?@$M1__T0J[_\"UN S_Y"UN_^3_ +MZ"UN_^C_["UN_^S_X"IN @<'6=&)FX $# K !!^$L"'?@*PAV8@2JL "&<: +M("L !+"K AF*DJ39B8P*P 0 H "$9AI(4TZY IYEA/2H!G#'#_8 . +M>' 8 .<G0 )&L !"X30>[VQ"U(]K!![O;$+4CVM$'N]L0M2/;4# 8 )6< +M BA3AVHL,"L $ * A&<*( =$@+"K QM%B=* 1(4TZY I8EA/)&L +M!"X34X<4QE*"8 -NB!N_^@H4%BN_^A*C&8&*'D @4D'!QG V@4X=J+# K +M ! "@ (1G"B '1("PJP ,;18G2@ $2%-.N0 *6)83R1K 0N$U.'%,92 +M@F#$(&[_Z" 0' !8KO_H4X=J+# K ! "@ (1G"B '1("PJP ,;18G2@ $ +M2%-.N0 *6)83R1K 0N$U.'%,92@F #28@;O_H+!!8KO_H2H9J1%.':BPP +M*P 0 H "$9PH@!T2 L*L #&T6)TH !$A33KD "EB6$\D:P $+A-3AQ3\ +M "U2@D2&8 H@;O_H+!!8KO_H*'D @4H2>[[WRHY (%*" &3'P 0 H@ +M11DP& !,?& & "F;F8 B"HY (%+"!N_^@L$%BN_^A)[OO?2H9G "X +M2H9G:' /P(8@11DP" #HCF;R8%@J.0 "!2@@;O_H+!!8KO_H2>[[WTJ&9P +MBDJ&9SIP#\"&($49, @ Z(YF\F J*CD @4H(&[_Z"P06*[_Z$GN^]]*AF=< +M2H9G#G 'P(8@11DP" #FCF;R0>[[WR8(N<-D P4'!Q3AVHL,"L $ * +MA&<*( =$@+"K QM%B=* 1(4TZY I8EA/)&L !"X34X<4QE*"N<-EQF +M"]9\,& _G1536!.($U231 02<!\>+"&8NY!^@ P<@VP&%3)__QFX# [$@9. +M^P "_H+_7O[*_P+^/OZ"_]S^@O_<_U[_,/WN_LK_,'AU<W!O;&EH9&-854]$ +M0B[[TT(N^])"+OO10B[[T$(N^\]"+OO.8"8=? !^])@'AU\ '[T6 6'7P +M ?O08 X=? !^\]@!AU\ '[SE)-$!5)P'P@L(9GWGPCL(9GX'PKL(9GPGPM +ML(9GQ'PPL(9GUF!<2J[_]&<:2&[[ "\N_^0O+@ (3KD $SJ3^\ #$*N__0, +MK@ #+_\&X4("[_\$/V#2#Z_"U)]JHM4?_H8!PM;OO$_^@O+O_P2&[_Z"\N +M A.N0 3GY/[P ,4DT,%0 J9@ HE)-2&[[R$A53KD $^>4$\J &=T2J[_ +M]&<:2&[[ "\N_^0O+@ (3KD $SJ3^\ #$*N__0,K@ #+[R&X4("[[R$/V +M#2#Z_"U)]JHM4?_@8!PM;OO$_^ O+OO(2&[_X"\N A.N0 3GY/[P ,(&[_ +MX"P06*[_X$J&:@A$AAU\ '[T2I%8$@@;O_H+!!8KO_H2H9J.D2&'7P ?O1 +M8#!\ $*N__!@%A =2<!Z,)"%W(8B!N6!W('<@"U&__ 0%4B 0?D @7="# +M @ 9M@,%0 N9@ O%)-#!4 *F8 (I234AN^OQ(54ZY !/GE!/* !G:$JN +M__1G&DAN^P O+O_D+RX "$ZY !,ZD_O Q"KO_T#*X R^OQN%" N^OQ# +M]@T@^OPM2?:J+5'_[& <+6[[Q/_L+R[Z_$AN_^PO+@ (3KD $Y^3^\ #"!N +M_^PJ$%BN_^PJ1& V(&[_Z"H06*[_Z& J>@ 0%4B 0?D @7="# @ 9Q80 +M'4G >#"0A-J%(@7E@=J!VH!@VGK_#!4 )&< _@)"KOKX+7P @5$^O1"KOKP +M+7P @5$^NQ@ 9H'7P ?O38 &7AU\ KZZV .'7P "/KK8 8=? 0^NM* +MA6P">@$@;O_H*!!8KO_H#"X 9/KJ9Q ,+@!$^NIG" PN &GZZF8N2H1L#"U\ +M (%1?KT1(1@'DHN^])G"BU\ (%1_KT8 Y*+OO09P@M? "!4GZ]$HN^\YG +M%B\N^O1.N0 4)!83RA&F<"YQ6\"*@P,+@!8^NIF""8Y (%+& &)CD @4H +M2>[[WQ N^NM)P'((L(%G"'(0L(%G%F! 2H1G0' 'P(0@0QDP" #FC&;R8#!* +MA&<L< _ A"!#&3 ( .B,9O)@'" $3'P 0 H@0QDP& !,?$ $ "DJ$ +M9N1![OO?)@@@#)"#T(4M0/KX2B[[SV< !;:YPV8R8 %K@RN ?KX; % +MHGH!+47Z^& !9@M? "!4OZ]& !8PM? "!4[Z]& !8 0+OKJ2<!Z6+"% +M9^AZ;["%9\!Z>+"%9]!@ 5D2H5L GH&2B[[TV8X(&[_Z"U0^N M: $^N10 +MKO_H2&[VV$AN^MA(;OK<( 52@"\ +R[ZY"\N^N!.N0 8?A/[P 88#8H;O;4 +M=A#6C"!N_^@HT%BN_^BYPV7R2&[VV$AN^MA(;OK<( 52@"\ 2&[VQ$ZY "( +M<$_O !0H0$JN^MAG"BU\ (%4?KT8!Y*+OO29PHM? "!5/Z]& .2B[[T&<( +M+7P @55^O0,+@ Y]MAO%DGN]MA![ !)@@@0TH09P SE*#8/1![OO4)@A* +M%&<$&!Q@ G@P($,0A%*#2H5F!DHN^\]G""!#$*[__U*#+47Z\& .2A1G$%.N +M^O @0Q"<4H-*KOKP;NQ)[OO4#"X ,/;89Q8J+OK<4X5J$$2%8 Q![O; *@AX +M!& X>@!(;O:^< P!2\ 3KD 'B04$]"+O;">&2ZA&W8#(4 /H; I![O:_ +M*@AX!6 (0>[VOBH(> 8M1/:X4X4H!4JN^MQN" PN ##VV&8$>BM@ GHM($00 +MA5.$+43Z["!$$*[ZZDHN^]%F!'H!8 )Z ! N^\Y)P,"%9P #O"\N^O1.N0 +M4)!83T'N^]0B Y*(T('0KOKPT*[VN"(&DH M0?KX8 #DDJ%; )Z!DHN^]-F +M-"!N_^@M4/K@+6@ !/KD4*[_Z$AN]MA(;OK82&[ZW"\%+R[ZY"\N^N!.N0 +M8LY/[P 88#(H;O:T=A#6C"!N_^@HT%BN_^BYPV7R2&[VV$AN^MA(;OK<+P5( +M;O;$3KD (E&3^\ %"A 2J[ZV&<*+7P @57^O1@'DHN^])G"BU\ (%6?KT +M8 Y*+OO09P@M? "!5OZ] PN #GVV&\62>[VV$'L $F""!#2A!G +64H-@ +M]$'N^]0F""@N^MQN"B!#$+P ,%*#8!9*%&8(($,0O P8 0@0Q"<4H-3A&;J +M2B[[SV8$2H5O""!#$*[__U*#* 4@!9"%+4#Z\& <4J[ZW$JN^MQO!$H49@@@ +M0Q"\ #!@!"!#$)Q2@U.$:N!*+OO19@8X? !8 *9S! N^\Y)P"(,P(%G(B\N +M^O1.N0 4)!83T'N^]0B Y*(T('0KOKP(@:2@"U!^OA)[OO48 ")$J%; 1Z +M!F &2H5F GH!2B[[TV8T(&[_Z"U0^N M: $^N10KO_H2&[VV! N^\])P"\ +M+P4O+OKD+R[ZX$ZY !EKD_O !1@,BAN]K!V$-:,(&[_Z"C06*[_Z+G#9?)( +M;O;8$"[[STG +P O!4AN]L1.N0 BCQ/[P 02>[VV PN "WVV&8,+7P @5= +M^O123& >2B[[TF<*+7P @5?^O1@#DHN^]!G""U\ (%8?KT$"[ZZDB 0?D +M @7="# 9RHF#& *($,,$ !E9PA2@R!#2A!F\"!##! 968$$+P 12!# +M2A!G$%*#8/8F#& "4H,@0TH09OA"KOKP2B[[T68$>@%@ GH $"[[SDG P(5G +M $.+R[Z]$ZY !0D%A/(@.2C-"!(@:2@"U!^OA@ #P(&[_Z" 0'4#[U%BN +M_^A)[OO40>P 28(8 U"!N_^@H4%BN_^A*A6H&*CQ_____2HQF!BAY (% +M)'@ 8 :XA6P(4H0=7/:O9O1*+OO19@1Z 6 ">@ 0+OO.2<# A6<(( :0A"U +M^OA33"8,F<1@?GH!+47_^&!V2>[ZZD'L $F"&!J($U231U0^NH0+OKJ2<!X +M>+"$8N!!^@ ^<A2P&%3)__QFTC [$@9.^P " G#Y>OK>_A[Y</F"^7KYBO]2 +M^7KZWORP_A[_UOEZ_];_POF"_V[Y>OF*>'5S;VYL:6AG9F5D8UA53TQ'140 +M $JN^O!L!'H 8 0J+OKP2J[Z^&P$> !@!"@N^O@O+OKT3KD %"06$\M0/:J +M+R[Z[$ZY !0D%A/G(6<@" #D(R<@)R$G*[VJDHN^]%F>F V4X=J+# K ! " +M@ (1G"B '1("PJP ,;18G2@ $2%-.N0 *6)83R1K 0N$U.'%/P (%*" +M4X9JQF \4X=J+# K ! "@ (1G"B '1("PJP ,;18G2@ $2%-.N0 *6)8 +M3R1K 0N$U.'(&[Z]!304H)2KOKT(&[Z]$H09KQ@-E.':BPP*P 0 H "$ +M9PH@!T2 L*L #&T6)TH !$A33KD "EB6$\D:P $+A-3AQ3\ #!2@E.N^OAJ +MQ+G#9'!3AVHL,"L $ * A&<*( =$@+"K QM%B=* 1(4TZY I8EA/ +M)&L !"X34X<4W%*"N<-ER& V4X=J+# K ! "@ (1G"B '1("PJP ,;18G +M2@ $2%-.N0 *6)83R1K 0N$U.'%/P ,%*"4Z[Z\&K$8#Q3AVHL,"L $ * +M A&<*( =$@+"K QM%B=* 1(4TZY I8EA/)&L !"X34X<@;OKL%-!2 +M@E*N^NP@;OKL2A!FO$HN^]%G/& V4X=J+# K ! "@ (1G"B '1("PJP , +M;18G2@ $2%-.N0 *6)83R1K 0N$U.'%/P (%*"4X9JQ@RN ?_X9A @ +M;O_H(%!8KO_H(()"KO_X'!UF /($)TH !":',"L $ * A&<P,"L $ @ +M )F')7K @O"DAX HO*P (3KD %*(3^\ #$J 9PI(4TZY I8EA/,"L +M$ @ 5G!'#_8 (@ DSN//SV@$Y>3G5.5O\<2-<\X$AX ,A"ITAN_SA.N0 +M4#A/[P ,>O]\ "AN A(> E2%1.N0 80A03RX 9P _E*'*$<O.0 "!3!( +M5$ZY !A6%!/+@ ,- D> !F$DA43KD %"P6$]3@"P 4H?9QWX ( ;E@$?V +M"2#_."\Y (%-$A43KD &%84$_9P"1,4DP0$DG <G.P@6)@0?H :G(*L!A4 +MR?_\9E(P.Q(&3OL O]Z !P )@ F "8 )@ F !8 . R "P !P !8*X !P " +M.GP 6 \.GP !& V.GP V P.GP !F J" < &<&.GP !V >.GP "& 8" < +M &?0.GP F ,<W!N;&=F94=%*B4 2H9M#G(RO(%L"":-NH9L BH&4H982P@' +M %G /[\"H< "8 #_0GX 2H5M4$ON_S@L+@ 0(D8BK@ ,2I5F$G(!*H%@ +M#%"N Q@*%BN Q@(B 54X!R!["!8A@P.PH&3OL O_H_^C_Z/_B_^+_Z/_H +M_^A2AUB&6$V^A6^X3.X\X/\<3EY.=4Y6_]Q(USSX)&X "'HR+ 4J;@ ,)BX +M$& ,NH-G #R6)52A5*&*$IX & "4H:Z@V< -A(> E2%1.N0 80A03RX +M9P Q%*'*$<O.0 "!3A(5$ZY !A6%!/+@ ,- D> !F$$A43KD %"P6$\L +M %*'V<>ZAF:R> %^ "\Y (%/$A43KD &%84$_9P"9,4DP0$TG <G.P@6)" +M0?H 2'(*L!A4R?_\9C0P.Q(&3OL O]V !P ) D "0 ) D !8 + @ " +M!P !8*X !P "6)5@' @' !0E6 4" < %B58 QS<&YL9V9E1T4J)0!2A5*& +M" < 6< _S *AP )@ /]V2H1G /\,2H1F /\23.X\^/_<3EY.=4Y6__1( +MUP# ?@!\ ")N A@%%*&WH<B!^6!WH$2&4G!WH%R,)Z!$!%(@$'Y (%W0@P +M ( &;:2H9G$@P1 "1F#"!N P@AU))( E@ G 3.X P/_T3EY.=2)O 0@ +M+P (;S)"@0@O !V<$$L%3@"! Y(A@ B+!4<C__$) 4X!D]" (" 6<" +M,L$( 9P(2P4YU B+P (9PX0 >&)$@#AB1( X8D2 ")O 0@+P ,;S ( +M+P =G!!+!4X @0.2(8 (BP5'(__Q"0%. 9/0@" @ %G C+!" &<" +M$L$@+P $3G4 (&\ !")(<O]*&5?)__QF /_X4XF3R" )3G4 !. +M5O_P2-< P")N AR ! 12< N $'Y (%W0@P )X &9$0?D @7="# W@ +M9Q9221 12< N &#H<@%221 12< N & .( =\*["&9^Y\+;"&9^9!^0 "!=T( +M, "> !F!' 8#)\,)R'8 [<AB &Y8#<@' PD(?<@%))$!%)P"X 0?D @7= +M"# G@ 9MQ*@68"1(8@!DSN ,#_\$Y>3G4 !.5O_\0?D @7=T>X +M"! 0<@/ @4Y>3G5.5O_\0?D @7=T>X "! 0<@' @4Y>3G5.5O_\0?D @7= +MT>X "! 0<@+ @4Y>3G5.5O_\0?D @7=T>X "! 0<@3 @4Y>3G5.5O_\0?D +M @7=T>X "! 0<D# @4Y>3G5.5O_\0?D @7=T>X "! 0<@C @4Y>3G5.5O_\ +M0?D @7=T>X "! 0<A# @4Y>3G5.5O_\0?D @7=T>X "! 0<@? @4Y>3G5. +M5O_\0?D @7=T>X "! 0 H "73EY.=4Y6__Q!^0 "!=W1[@ ($!!R%\"! +M3EY.=4Y6__Q!^0 "!=W1[@ ($!!R(,"!3EY.=4Y6__QP RN ?P (4\!$ +M $Y>3G5.5O_\("X "')_P(%.7DYU3E;_\$C7 , @;@ ($BX #RXN !!3AVL, +M'!B\ 6;V4T@@"& "< !,[@# __!.7DYU3E;]O$C7 /!*.0 "LM!F!DZY !@ +MDB@N @J+@ ,9@ $ DJ$9@ EG@ ?@ L/ "LM J/ "LM\O!2\&3KD &$H +M4$]*@&824H=R#]J!W(%R!KZ!;>)*A&=82'D K+02'D J[$3KD (OX4$]^ +M#P:' *RT"P\ *S.4AY ((5$AY *NQ$ZY "+T%!/+P=(>0 "KL1.N0 +MB]!03WH/WH6^AF74(#P J[$8 #GB \ *RT& Y0@!"( Z8%$@-"!!H +M K+!8 #@$AX "\O!4ZY !A"%!/2H!G $V+P5.N0 4)!83WYXL(=N ,8 +M+P5(>0 "KL1.N0 B_A03RX\ *NQ'P 2'D @A6+P=.N0 89!03RX 9@ +MMG 8 #)B\'2'@ 4ZY !2N%!/2H!F "Z< !@ ,,+P=(> "3KD %*X +M4$]*@&8 *!P & O(O!TAX -.N0 4KA03TJ 9@ AG 8 "V"\'2'@ +M!$ZY !2N%!/2H!F;' 8 "P"\'2'@ !4ZY !2N%!/2H!F5' 8 "J"\' +M2'@ !DZY !2N%!/2H!F/' 8 "D"\'2'@ !TZY !2N%!/2H!F)' 8 " +M>" &<@:P@6(6,#L*!D[[ +_0O]<_W;_D/^H_\#_V'X 4H9R![R!;0#_#DAY +M ((6$*G3KD &&04$]*@&8 .)(>0 "LM!(;OW\+P5.N0 5Q!/[P ,/@!M +M ':2D=G,$AX 0%(;OW\2'D @7<3KD (M 3^\ #$AX 0%(;O[]2'D @< +M3KD (M 3^\ #$J$9@ !UDAY *RWTAN_<PO!4ZY !7<D_O PN &=P($=* +M$&=$2KD @A(9PXO.0 ""$A.N0 ,!Y83R/' ((2$AX #!![OW,3^__T")/ +M,#P "R+84<C__"\Y ((1$ZY "+0$_O #A*A&8 6Q(>0 "LNXO!4AX -( +M>0 ""%I.N0 6Y9/[P 0/@!L!G 8 !4DI'9PQ(QR\'3KD #AV6$]*A&8 +M 3!(>0 "LOU(;OW,+P5.N0 6&1/[P ,+@!G #>($=*$&<T2KD @A,9PXO +M.0 ""$Q.N0 ,!Y83R/' ((3$AX #!(;OW,+SD @A$3KD (M 3^\ #$J$ +M9@ U$AY *S#"\%2'@ !4AY ((8DZY !;ED_O ! ^ &P,0GD @@2< !@ +M "T2D=G$D)Y (($DC'+P=.N0 .'983TJ$9@ C$AY *S&R\%2'@ !DAY +M ((:TZY !;ED_O ! ^ &TT2D=G#$C'+P=.N0 .'983TJ$9E9(>0 "LRHO +M!4AX =(>0 ""'9.N0 6Y9/[P 0/@!L!' 8#Y*1V<N2,<O!TZY X=EA/ +M8" @!'X'L(=B&# ["@9.^P "_)[]YOX\_J;^XO\^_X;_ND*G+P1.N0 4KA0 +M3TSN /#]O$Y>3G5.5O_\+H<O+@ 0+RX "$AX %(>0 ""().N0 6Y9/[P 0 +M+@!O,DAX @(O+@ ,+P=.N0 BI9/[P ,#( ("9PPO!TZY X=EA/?O\O +M!TZY X=EA/( <N+O_\3EY.=4Y6_[1(UR#@+RX $"\N A(> "2'D @B+ +M3KD %N63^\ $"H ;0 ODJ%9@H@/ "")9@ "R2&[_Q"\%3KD #B&4$]* +M@&8 )P@+O_45( O $ZY O"%A/+@!G "&+R[_U"\'+P5.N0 BI9/[P , +ML*[_U&9B*FX #"P'W*[_U"!&$+P "E*&($9"$$A5+P=.N0 6C)03RP 9S)( +M;0 $+P9.N0 6C)03RP 9R!(;0 (+P9.N0 6FA03TJ 9PXO!4ZY X=EA/ +M( =@%B\%3KD #AV6$\O!TZY P'EA/< !,[B#@_[1.7DYU3E;_M$C7(. O +M+@ 0+RX "$AX 1(>0 "")=.N0 6Y9/[P 0+ !M &:2H9F"B \ ((HV +M 8Y(;O_$+P9.N0 .(903TJ 9@ !>" N_]14@"\ 3KD "\(6$\J &< 6(O +M+O_4+P4O!DZY "*ED_O RPKO_49@ !/BIN PN!=ZN_]0@1Q"\ I2AR!' +M0A!(;0 ,+P5.N0 6C)03RX 9P !"DAM ! O!TZY !:,E!/+@!G #V2&T +M%"\'3KD %HR4$\N &< .)(;0 8+P=.N0 6C)03RX 9P SDAM !PO!TZY +M !::%!/+@!G "Z2&T ("\'3KD %HR4$\N &< *9(;0 D+P=.N0 6C)0 +M3RX 9P DDAM "DO!TZY !:N%!/+@!G?DAM "HO!TZY !;'%!/+@!G;$AM +M "LO!TZY !;'%!/+@!G6DAM "PO!TZY !;'%!/+@!G2$AM "TO!TZY !; +M'%!/+@!G-DAM "XO!TZY !:N%!/+@!G)$AM "\O!TZY !:N%!/2H!G$B\& +M3KD #AV6$\@/ "LOU@%B\&3KD #AV6$\O!4ZY P'EA/< !,[B#@_[1. +M7DYU3E;__"Z'+BX ""!N P@ATAX HO!TZY !A"%!/+@!F!' 8 @@1T(0 +M4H<@!RXN__Q.7DYU3E;_^"Z'(FX "$H19PP@;@ ,((E@(DJ'9@1P & J<C"^ +M@6T.<CF^@6X(<C">@1*'8 02O !_4DD0$4G +@!R"KZ!9M)"&2 )+B[_^$Y> +M3G5.5O_T2-< P")N A*$6<@#!$ "F8*(&X #!"\ ']@-GP 8"!R,+Z!;09R +M.;Z!;P1P & FW(8B!N6!W('<AWXPG(=221 12< N '(*OH%FU"!N P0AD(9 +M( E,[@# __1.7DYU3E;_]"Z-*FX "$H59UP@;@ ,#!4 "F80$+P ?V!0$+P +M 6! 0A!@/")-4DT0$4G <D:P@6?N<DZP@6?H<E2P@6?<<EFP@6?6<F:P@6?6 +M<FZP@6?0<G2P@6?$<GFP@6>^< !@#@P5 IG!' 8 1"'2 -*F[_]$Y>3G5. +M5OO<2-<@P"IN @N+@ 0($=*$&9J2%5.N0 C'!83RX 9P8@1TH09E9(>0 " +M"*1.N0 C'!83RX 9P8@1TH09CY*.0 "KK1F,$AY ((J4ZY ",<%A/+@!G +M!B!'2A!F"$AY ((M& "+P=(>0 "KK1.N0 B_A03RX\ *NM" N PB .F! +M1(#0@0: *RP2\ +P=.N0 82A03TJ 9A0O!R\N !1.N0 B_A03W 8 ! +MR"\'3KD %"06$]\#K"&;P9P_V ;)(>0 ""+9(;OP 3KD (OX4$](54AN +M_ !.N0 B]!03TAY ((PTAN_ !.N0 B]!03R\'2&[\ $ZY "+T%!/0J=( +M;OP 3KD (LV4$\L &Q<#+D " ( 1&902'D @C%2&[\ $ZY "+^%!/ +M2%5(;OP 3KD (O04$](>0 ""-Q(;OP 3KD (O04$\O!TAN_ !.N0 B]!0 +M3T*G2&[\ $ZY "+-E!/+ !*AFT.+P<O+@ 43KD (OX4$\,K@ $ #&8 +M .1(>0 ""-Y(;OP 3KD (O04$]"ITAN_ !.N0 BS903RX <O^^@68*3KD +M &!.8 LDAX !A(;OOH+P=.N0 BI9/[P ,<ABP@6<63KD &!.+P=.N0 +M.'983W#_8 A$AN^^A(>0 "!N1.N0 B_A03R/N^_@ @;T2KD @;X9PXO +M.0 "!OA.N0 ,!Y83TJN^_QO5B\N^_Q.N0 +PA83RI +R[[_$A5+P=.N0 +MBI9/[P ,L*[[_&<4+P=.N0 .'983TZY !@3G#_8!(CS0 "!O@O!TZY X +M=EA/( 9,[B# ^]Q.7DYU0KD @;X+P=.N0 .'983TZY !@3G#_8-Q.5O_\ +M(#D @A$3EY.=4Y6__!(UR# +#P @CB+CP @EH*GP @F]2KD @@"9@ ! +MV$AX +!.N0 +PA83R/ (( DJY (( F=Z+P9.N0 4)!83U* +P!.N0 +M+PA83R/ ((!F=<+P8O.0 "" 9.N0 B_A03R\'3KD %"06$]2@"\ 3KD +M "\(6$\CP "" IG+B\'+SD @@*3KD (OX4$](54ZY !0D%A/4H O $ZY +M O"%A/(\ @@.9@9P & 41(52\Y ((#DZY "+^%!/+#D @@&?@ @ +M>0 "" )(<'0 +P9.N0 6C)03RP 4D<,1P ,;>)^ "!Y (( DAP=# O!DZY +M !:,E!/+ !21PQ' QMXBPY (("GX ('D @@"2'!T8"\&3KD %HR4$\L +M %)'#$< !VWB?@ @>0 "" )(<'1\+P9.N0 6C)03RP 4D<,1P ';>(L.0 " +M" X@.0 "" (&@ )@O "\&3KD %HR4$\L " Y (( @: G"\ +P9. +MN0 6C)03RP (#D @@"!H "@+P O!DZY !:,E!/+ @.0 "" (&@ +M *0O "\&3KD %HR4$\L " Y (( @: J"\ +P9.N0 6C)03RP (#D +M @@"!H "L+P O!DZY !:,E!/(#D @@"3.X@P/_P3EY.=4Y6 !(>0 " +MKK1(>0 "!N1.N0 B_A03T*Y (&]$JY (&^&<.+SD @;X3KD # >6$]" +MN0 "!OA"N0 "!OQ.7DYU3E;__"Z'?@!(>0 ""?8P!TC (@#I@42 T($&@ " +MLM O $ZY "+^%!/4D<,1P ';=9(>0 ""?A(>0 "!N1.N0 B_A03TAY (* +M $AY *RP$ZY "+^%!/(_P @H" *RL"/\ (*!@ "LK0N+O_\3EY.=4Y6 +M__0@;@ ($BX #[(09@0@"& &2AAF]' 3EY.=0 3E;_]"Z'(&X #")N @> +M&+X19@A*&6;V< !@"A 12< 2($G!D($N+O_T3EY.=0 3E;_]"Z-(FX ""!N +M Q@%BI(8 @0%; 19P9234H59O1*%6<&4DE*$6;FD^X "" )*F[_]$Y>3G5. +M5O_X2-<@@"XN AF!BXY *O1$J'9Q8O+@ ,+P=.N0 85A03]"'*D!*%68$ +M< !@*"\N Q(54ZY "-"%!/+@!F"$*Y *O1& ,($="$%*'(\< J]$( U, +M[B" __A.7DYU $Y6_<A(US#@+"X $"UY *S//_T?@$M1__X+4;__$AN +M_=Q(;OW@2&[_]$AN A.N0 <E8@;@ 8(*[]Y"IN !0J+@ <("[]X'X%L(=B +M?# ["@9.^P " "X # , $8 6 !8("[]Z-"&*H!*AF]62^[]["A%0?9I(/WL +M+@@8W;O'9?I@0'X!*H=*AF\X*D4H1MG%&OP ,+O,9?A@*$*5+CD @H@<@B\ +M@6T,? A@"D*5+CD @H<? ,J1RA%WH88W;O'9?H@14(P: @!4SN,.#]R$Y> +M3G5.5OW(2-<@\"HN ! M>0 "LSS_]$*N__@M1?_\2&[]W$AN_>!(;O_T2&X +M"$ZY !R5B!N !@@KOWD*"X '"XN !0@+OW@? 6PAF( +(P.PH&3OL @!$ +M P # !R (8 ADJ%;0P@1R N__"0A2" 8 8@1R"N__!^ $ON_>PL!& (($80 +MG5*'4H:^KO_P;?(@1-'N__!"$&!D($="D"!$$+P ,#I\ &ZC6\6?@'>A-J$ +M+ 4@1Q"\ #!235*'OH9E\D(U2 !@-B!'0I L.0 ""B!^"+J';0YZ"& ,($=" +MD"PY (*''H#+@8J1-R%($<:T%*'OH9E]B!$0C!8 " $3.X@\/W(3EY.=4Y6 +M_^!(USS@*&X #"XN !1.N0 7C8@0"!0'! J1TJL 1G & ($<0O M4H<J +M1V 7(:_ P2H5G &.&L:9S%-*+@JYQVP 8 :_ P4DQ@\GX(M<=L""AY +M (*.& .*'D @HT8 8H>0 ""CQ*%&< 58:W&#V2JP "&X.( I6@$2 L*P +M"&\ )H:[ ,&L8V? !?@%@!AK24DM2AT7T> Q*$F;R2H5F# PE #!G^KP5 +M9P)231K\ &4H; (V<M33$J,:P8:_ K8 H:_ M( Q$@"A 2&[__' , PO +M $ZY !XD%!/?@!)[O_\8 12AU),#!0 ,&?V? *^AF\$?@)@"'P#OH9N "\ +M2?9X_$'N__Q62"X(&MRYQV/Z8 IG !D(JPK (;C9^ "9'8 @:]+@,4H=2 +M2R *T*P "+Z ;>X:QB9'2C2X#&= OHIL/"X+)DH:]'@,4H>^BVWV8"P:_ P +M&L9^ & &&OP ,%*'("P "-"*1("^@&WN?@!@!!K34H=']'@,2A-F]$J%9C0, +M)0 P9_J\%6<J4DU@)B1N @J+@ 0(!1^!;"'8@#^QC ["@9.^P "_G;^O/Z\ +M_I;^K/ZL0A5,[CS@_^!.7DYU3E;]W"UY *S//_T<@$M0?_X+6X $/_\2&[] +MW$AN_>!(;O_T2&X "$ZY !R5D_O ! O+@ 8+RX %$AN_> O+@ 03KD &/8 +M("X &$Y>3G5.5O_\+RX %$*G+RX $"\N PO+@ (3KD &6N3EY.=0 3E;_ +M\$C7(, J;@ ,+"X &!XN !<,!P P9@9*AF< ,XB;@ 0<@&#D2!N @@$'(# +ML(%B7C ["@9.^P " @ L !0 $@,!P U;0 H@P' #5N0$J&9CQ*K0(0;P +MD$'M P@+0(0$# (_TG ?C"0AW(!2H!L"$2 P(%$@& "P(%*@& ,2JT !&9B +M8 9*K0 $9UHN+0(04X<L!V ,2H=M$A*\ #!3AU.&0_5H# P1 #EGZDJ';092 +M-7@,8$(;? Q P@;@ (#*@ ! 1F!E*M A@*$JM A!O"B M A ;O P +M" Q2K0(08!)*K0(0;@P;? P Q^ 2M' A @+0(00C4(#$SN(,#_\$Y>3G5. +M5OLL2-<XP#U\ 0#]^#U\ 0#[\$AN^^Q(;OWX+RX "$ZY !^BD_O Q*KOOL +M:B!(;OOJ("[[[$2 H /__+P!(;OWX3KD 'RV3^\ #$AN^_!(;OWX3KD +M '_*4$]*KOOL;@I![OOP+4C[Y&!T2&[[Y"\N PO+OOL2'@ DAN^_!.N0 +M@3)/[P 4("[[Y&<H?@&PAV9*+R[[[$AY (*7$AN^Y1.N0 BO!/[P ,2&[[ +ME$AX ")@("\N^^Q(>0 ""G%(;OM$3KD (KP3^\ #$AN^T1(> ,3KD (#N +M4$](;OM (&[[Y' ,"@ D'P"@9P # H__XO $ZY !XD%!/?@!+[OM 8 12 +MAU)-#!4 ,&?V)FX $)O-? .^AFX>0?9Y(/M +@@H2T'N^T!62"P(($<8T%*' +M4DV^AF/T(&[[Y' ,"@ E6 +@!M)N.'0?/8 "P(+P8@;OOD< P,'@&+P!. +MN0 >)!03UA-6(95AVKB0C/8 "!N !@@C2!N^^0P* $2, @;@ 4((!![OOP +M("[[Y+"(9PHO $ZY " TEA/3.XXP/LL3EY.=4Y6^R1(UR#\*FX %"HN ! L +M+@ ,+BX ""!N !A"D"!'2J@ !&8T?@ H#6 *($00O P4H=2A+Z%8_)!]7@ +M*@A@"B!%$+P ,%*'4H6^AF/R(&X '""'8 "=CU\ 0#]^#U\ 0#[\$AN^^Q( +M;OWX+P=.N0 ?HI/[P ,/6[[[OW\=!&4KOOL<@ R+OWZZ8F4@4P\( ( $T1 +M<A#BJM2&M(5D B0%+@6\AV,"+@9,/'@' -2:@:' :DU'(0XJ=2AT2'2&[[ +MZ"\'+P)(> *2&[]^$ZY "!,D_O !0@+OOH9R9^ ;"'9D8O DAY (*ADAN +M^YA.N0 BO!/[P ,2&[[F$AX ")@'B\"2'D @J<2&[[2$ZY "*\$_O Q( +M;OM(2'@ #$ZY " [E!/(&[[Z QH__ !&YV,"@ !$C 1(!J!'X/T(?H@"@ +M?@!\ & .(&[[Z$IP: 9F"%*'5(:^A&WNOH1L"B!N^^@ < !2@8N!"P$XX8J +M!..%( :0A2H 8! @;OOH,;!H!E@&4H=4A52&(&[[Z' ,"@ KZ 9>*9: " +M(&[[Z.F$V6@ !"!N^^A*: $;#!(;OM&,"@ !$C 1( "@ __\O "\(3KD +M 'RV3^\ #$IN^T9G"B!N^^@ : ! 9(;OOP+R[[Z$ZY !_RE!/?@ ^+OOR +M4X<L!^.&0?9I(/OV+ A@!%.'588@1DI09_9(;OM < P-GL@^_8O $ZY !X +MD%!/>@!![OM + A@!%*%4H8@1@P0 #!G]'P > .ZA&XB0?99(/M *@@H#4'N +M^T!62"8(($0B11"14H52AE*$NH-C\%.':S+CAT'V>2#[]BX(0?5H "H(0>[[ +M]B@(+P4@1W ,! O $ZY !XD%!/6(98A56'OH1DY$(U: @;@ <((8@;@ 8 +ME(8@@D'N_?@@+OOHL(AG"B\ 3KD (#26$],[B#\^R1.7DYU3E;J0$C7./PF +M;@ 0+BX "'8P0J[__"!')U !":H 0,J ( !&<,#*@ ! 1F 9> +M*&X # RL " (;!0,K $ !&86#*P ! AL#"!N !1^"(^08 & +M,$'N_]PB1S \ <@V5'(__Q![O_<0^[_O# \ <BV%'(__P,KO______Y&X( +M0J[_X& 2P,K@ )__Y&T(0J[_P& -X@+O_D<A]*@&P(1(# @42 8 + +M@7X?L(=F1" N_^12@&H"T(?J@"P ?@!+[O_(8 1"G5*'OH9E^'P%OH9L "2 +MY8=!]GCH+@A![O_H0>@ %"P(($="D%B'OH9E]F!R("[_Y%* :@1^']"'ZH L +M 'X 2^[_R& $0IU2A[Z&9?@@+O_D<A]*@&P(1(# @42 8 + @7(?DH!P >.@ +M4X N!N6'P;9XR$: P;9XZ%*&+@9\!;Z&;!SEAT'V>.@N"$'N_^A!Z 4+ @@ +M1T*06(>^AF7V2&[_O$ZY !S:%A/2J[_X&<V#*P ! 1F""XL A2AV & +M+CP !-$2&[L<$AN['1(;NQX+P=(;O_<3KD &<P3^\ %& (0J[L<$*N['0D +M+NQPU*[L='@ 2JP !&8&2JP "&P4#*P ! 1F:B L A2@+"";V ,K +M $ !&8:+BP "%2'GH(,AP @!C!BX\ " 'P!8!9^ "PL A4A@R& " +M &,&+#P ( 2&[J:$ANZFQ(;NIP+P8O!TAN_[Q.N0 :.)/[P 8*"[J;-BN +MZF@,K $ !&8 @ J+NQPNJP "&\$*BP "'X 2H5O'$OK Q![NQX+ A! +M[NQXVH@@1AK04H=2AKR%9?0J;NQPV^[L=+OL AO!"IL B^C6P80>L #"P' +MW(C;R"!&$+P ,%*'4H:\C67ROJP "&8 *0G1P(0( *0AR= B^@FQ,OJ[L +M<&0*%C9Y(.QX4H=@ G8P0?9Y(.QX+ A@"KZN['!D#%*'4H8@1@P0 #!G[KZN +M['!D!GX!+4?__$JN_\!G $N?@$M1__\8 !)$JN_\!G $<2J[J;&\&=C!\ +M & &%B[J<'P!+@9!]FD@ZG L"& (OH1L#%*'4H8@1@P0 #!G\+Z$; Z'X! +M+4?__& -XJ+ (FH=*AV8>? !+[NIP8 12AE)-#!4 ,&?VVH;:KNILW*[J +M;& "? "ZA&\"*@0@!42 )T "+JNZFQO!B@NZFQ@ B@%O(1L$DOK S;QQK\ +M #!2AU*&O(1M]+R%;!I+ZP ,V\<@!I"NZFP:]@D@ZG!2AU*&O(5M[)RNZFR\ +MKNIH;#I*AFP$=C!@!A8V:2#J<%*&:@)\ $OV:2#J<& *O*[J:&P*4H9230P5 +M #!G\+RNZFAL(GP!+4;__& :0>L #"P(W(=@"B!&$+P ,%*'4H:^K (;? G +M1P(0+R[__$G#+P,O+@ 42%-(5$ZY !F(& C9*K (;0 !'B "T*P " R +M " &P ^^1^ $OK Q![NQX+ A@""!&&M!2AU*&OJ[L<&7ROH)L&DOK Q! +M]7@ + C;PB!&$+P ,%*'4H:\C67R*@2XK (;P0J+ (NJ[J;&\&*"[J;& " +M* 5\ $J$;Q)+ZP ,V\<:_ P4H=2AKR$;?2\A6P:2^L #-O'( :0KNIL&O8) +M(.IP4H=2AKR%;>Q+ZP ,V\=@"!K\ #!2AU*&O*P "&WR)T<"$)2')T( ")RN +MZFPN!KZNZFAL/$J'; 1V,& &%C9Y(.IP4H=J GX 0?9Y(.IP+ A@"KZNZFAL +M#%*'4H8@1@P0 #!G[KZNZFAL!GX!+4?__"\N__Q)PR\#+RX %$A32%1.N0 +M9B!@ $2+"P "$2&#(( ( ; #ZR R& " &P ^KZTAFXZM(9F"!8N['A^ +M 6 $=C!^ $OV>2#L>& *OJ[L<&0*4H=230P5 #!G\+ZN['!D!GX!+4?__$*K +M A!@;GX 0>L #"@&2^[L>"H(8 @@11"=4H=2A2 N['"0A+Z 9>Y^ $OK R4 +MABH"8 8:_ P4H>^A6WV)T<"$+ZN['!D+!8V>2#L>%*'2_9Y(.QX8 J^KNQP +M9 I2AU)-#!4 ,&?POJ[L<&0&?@$M1__\2J[_P&<&?@$M1__\+R[__$G#+P,O +M+@ 42%-(5$ZY !F("XK A!)ZP ,V<=@!AC\ #!2AR K A#0AKZ ;?!"JP ( +M)T<"$$(S> Q,[CC\ZD!.7DYU3E;_U"Z-*FX $"!N !1"D"!N @M4/_X+6@ +M!/_\Z>X ?_X*T !"\N A.N0 =,!83RJ (!5R!;"!8A0P.PH&3OL @ P +M P # P # ,$AN__A(;O_83KD '5X4$\O+@ 42%4O+@ ,2&[_V$ZY !K +MNBIN_]1.7DYU3E;_O$C7., H;@ ((&X %$*0?@!+[O_P0>[_\$'H ! L""KT +M> !8A[O&9?9@%# ["@9.^P " % +@ N % 4 !0)FX $.GN '_\"= 1( +M5$ZY !VHEA/)H @$WX%L(=CRDA42&[_T$ZY !W1%!/+RX %$A3+RX #$AN +M_]!.N0 :[I,[CC _[Q.7DYU $Y6_]A(UP#X(&X " RH @ $9@ ! +M(GX 8 @,1P %9 Q21W , =*L P,9^X,1P %90A"J $8 _DI'9UI"KO_\ +M>@ Z!W@%F(63R6 .W(4AL&P,F Q2KO_\6$DL+O_\O(1EZ@RN !?_\;!SE +MABU&__0@+O_T0K (#%BN__0,K@ !3_]&WJ< P!^N(D:@ "& "4D=P # ' +M<@22@")!2K"<#&?N0F[_^BXH P,AP __]B"' 0X:\]0/_Z#(< ____8@;A +MCU!N__H,AP____]B!NF/6&[_^@R'/____V(&Y8]4;O_Z#(=_____8@12;O_Z +M< P+O_ZD:@ " QN '_^F4N? !*B6TH< P+O_Z=B"6@"X)Y8=#\'@,*A$R +M+O_ZXZTH$>:LC(4BABP$68=JYDSN /C_V$Y>3G5.5@ < $R+@ *XZ"!N0 " +MLT1.7DYU3E;_]"!N @M4/_X+6@ !/_\,"[_^ ) ?_!F&B N__@"@ /__]F +M"DJN__QF!' 8$1P 6! ,"[_^ ) ?_ ,0'_P9C @+O_X H #___9@I*KO_\ +M9@1P V <("[_^ * ___PR 0 &4$< 1@!G %8 )P DY>3G5.5O_D2-< +M\'P (BX #" N A^#-"'>""8@3!\ !#1P"X0XZ\J$.BMC(<@ABP%64BQP&3L +M3.X \/_D3EY.=4Y6__!(UR" *FX ""!N PM4/_X+6@ !/_\Z>X ?_X*H K +M;O_\ !!^"$*U> Q8AW(4OH%M]# N__@"0'_P9VPP+O_X D!_\ Q ?_!G "2 +MZ>X 2__X!( /_*T "'X"*T< !" N__@"@ /__\ @ 0 K0 ,2'@ +M"TA53KD '4Z4$]@&$JN__QF7'X#*T< !& *2J[__&8:0JT !$SN((#_\$Y> +M3G4@+O_X H #___9^!^ BM' 0K?/___ T "" N__@"@ /__\K0 ,2%5. +MN0 <VA83V#"("[_^ * ___V>>("[_^ * ___P@ !-G"'X$*T< !& 2 +M?@0K1P $2'@ !$ZY !TJEA/("[_^ * ___P" @ & _TY.5O_@2-< +MP")N A\ $'N__ N"$'N__!!Z 0(@@@1R"Q: !8AEB'OH%E\C N__ "0'__ +M9THP+O_P D!__PQ ?_]G1G "8"YP!& J2J[_]&8^2J[_^&8X2J[__&8R< -@ +M%$JN__1F'DJN__AF&$JN__QF$G 3.X P/_@3EY.=4IN__)GW' !8.Q*;O_R +M9[QP # N__(,@ @ !DJG %8-1.5O_<2-<PX"AN Q\ $'N__ N"$'N__!! +MZ 0*@@@1R"T: !8AEB'OH5E\BIN CI[@ !__ J@"MN__0 $"MN__@ %"MN +M__P &'X00K5X#%B'?!2^AFWT,"[_\ ) ?_]G8# N__ "0'__#$!__V< (IP +M # N__ "0'__!( #__*T "'X"*T< !' ,"[_\@" $ "M Q(> / +M2%5.N0 =3I03V ,?@,K1P $8 1"K0 $3.XPX/_<3EY.=7 ,"[_\H"N__2 +MKO_X@*[__&?>?@(K1P $*WS__\ 1 AP # N__(K0 ,2%5.N0 <VA83V"^ +M< P+O_R@*[_]("N__B KO_\9YX(+@ '__)G"'X$*T< !& 2?@0K1P $2'@ +M!$ZY !TJEA/< P+O_R $" "M Q(> 08 #_7 $Y6__1(UP# +M? ,@;@ ,/BX "G , <N $Q\ $ *<##2@!&!8 !,?' ' "E'._^!, +M[@# __1.7DYU3E;_W$C7./Q\ '@ >@ H;@ 0=@ V+@ *) -3@BIN Q@,"\& +M( *0AS T"@ "@ __\O ' ,!4O $ZY !Y^$_O PN +Z&9 )21"P'4H54 +M32X%OH-ERB9N !0P//__P$8V@'(0XJXW1@ "-T0 !$SN./S_W$Y>3G5.5O_< +M2-<X_'X > !\ "AN !!V #8N HD U."*FX #& X+P<@ I"%,#0* * #_ +M_R\ < P%2\ 3KD 'GX3^\ #"X #(>RT%X 90A21 2'LM!> %*&5$TJ!KJ# +M9<(F;@ 4( =,? ! G$#:!3'QP!P )Q @!TQ\ $ "<0-T$ DQ\< < +M "<0< P!$2 Y8@B -*!T('0AS= 1,[CC\_]Q.7DYU $Y6__PP+@ * +MP.X #M"N !!.7DYU3E;_^$C7 (1^ #XN K>K@ ,( =,? G$'(0XZA, +M?' " G$(""3.X A/_X3EY.=4Y6__@NARXN AG&"!N QP # 0WH P//__ +MP$<PP'(0XJ]F["XN__A.7DYU3E;_^$C7(( N+@ (9R0J;@ ,+P=P # 5+P!. +MN0 >@Q03RX ,#S__\!'.L!R$.*O9N!,[B" __A.7DYU3E;_^$C7 (0P+@ * +MP.X #M"N ! N $Q\ "<0<A#CJ$Q\< ( "<0@(),[@"$__A.7DYU3E;_ +M_# N K [@ .3EY.=4Y6__A(UP"$,"X "L#N XN $Q\ "<0<A#CJ$Q\ +M< ( "<0@(),[@"$__A.7DYU3E;_^$C7 (0^+@ .< P+@ *[ZC0K@ 0+@!, +M? G$'(0XZA,?' " G$(""3.X A/_X3EY.=4Y6__PP+@ *P/PG$-"N +M Q.7DYU3E;_^$C7 (1^ #XN IR$..OWJX #" '3'P )Q!R$..H3'QP +M @ )Q" @DSN (3_^$Y>3G5.5O_X2-< A"XN @@!TQ\ "<0<A#CJ$Q\ +M< ( "<0@(),[@"$__A.7DYU3E;_Y$C7,/ H;@ (."P GX ? !+[ &>@ Z +M+@ .< P!"@ 8"0O!R\%< P%2\ 3KD 'L@3^\ #"X ,#S__\!'.L!R$.*G +M4H:\A&782H=G)DOL 8J!N.%V\4O!TZY ![IEA/+@ P//__P$<ZP%*&<A#B +MIV;D.48 DSN,/#_Y$Y>3G5.5O_D2-< ^"!N @^* ">@!\ #8N Y#Z & +M> X!V 8?@ ^$>>OWH4P//__P$<RP'(0XJ\J!U*&O(1EY$J%9PPP//__P$4Q +M@&H&4H8Q1@ "3.X ^/_D3EY.=4Y6_^A(UP#T(FX "'P >@ Z*0 "4X5K.%Q) +M+@EP # N YX$)B XX7:AR)%*@=^ #X1Z:]T$.6NWH8@!W(0XJ@R@ *' #_ +M_RP'54FSQ63>(&X $#"&3.X ]/_H3EY.=4Y6_^A(US#@?@!\ "AN A+[ & +M>@ Z+@ .8"0O!R\%< P%2\ 3KD 'JH3^\ #"X ,#S__\!'.L!R$.*G4H9P +M # L *\@&722H=G)DOL 8J!N.%V\4O!TZY ![IEA/+@ P//__P$<ZP%*& +M<A#BIV;D.48 DSN,.#_Z$Y>3G5.5O_D2-<P^"AN @^+ "? J+@ 02^P +M!G@ ."X #G8 -@=@)"\%+P1P # 5+P!.N0 >?A/[P ,*@ P//__P$4ZP'(0 +MXJU2AKR#9=A*A6<,,#S__\!%.8!J!E*&.48 DSN,/C_Y$Y>3G5.5O_D2-<P +M\"AN @X+ "?@!\ $OL 9Z #HN YP # $* !@)"\'+P5P # 5+P!.N0 +M>R!/[P ,+@ P//__P$<ZP'(0XJ]2AKR$9=A*AV<F2^P !BH&XX7;Q2\'3KD +M 'NF6$\N # \___ 1SK 4H9R$.*O9N0Y1@ "3.XP\/_D3EY.=4Y6_]A(USC +M?@,B;@ (2^D #'P,+4;__-O&8 13AUE-2I5G^"9N Q*AVU 0>D #$*N__0@ +M!^. D*[_]"U __@J2"P'Y8;<B" N__A)\PH&(!4"@ __\X@" =<A#BJ#E +M )5KO_XN\9CW..'5(<W1P "2FL !F8H.'P 3I\ )@#D'K 8QL]@&V/Y2 +M3%1-( QR #(K *P@67F4VL B I A2@'( ,BL NF)D($@;@ 0((!":P $ +M3.XXP/_83EY.=4Y6_^Q(US#@? H;@ (+BX #$OL 9@("\'< P%2\ 3KD +M 'MN4$\N # \___ 1SK <A#BKU*&< P+ "O(!EUDJ'9R9+[ &*@;CA=O% +M+P=.N0 >Z983RX ,#S__\!'.L!2AG(0XJ]FY#E& ),[C#@_^Q.7DYU3E;_ +M\$C7,, H;@ (*FX #$'L 8L"' ,"P B!&,# *_@* #__X#\)Q!(0#M +M 9P # L (R+0 &LG *_F8(.WP 0 "8" [? " )P # L (@1C P"OX" +M@ __^ _"<0.T "'X /BP E6':QSCA]Z&($=P # 0+P!(54ZY !_4%!/ +M58>^AF3H?@!@$$*G2%5.N0 ?U!03WP0WH8P+ $2,!\$)"&OH!OXC L 1( +MP+"';QHP+ $2,"0AP* #__R\ 2%5.N0 >]103T)M 1,[C# __!.7DYU +M !.5O_P,"X $G( 2D!G$"!N PB;@ (,MA20;) 9?A.7DYU3E;__"Z-*FX +M"$A53KD # >6$\J;O_\3EY.=4Y6_V C[@ ( ( 1"\N Q(> O2'D @K> +M2'D @JT2&[_8$ZY "*\$_O !1(;O]@3KD (S@6$].N0 C!!.7DYU3E;_ +M:$C7//PJ;@ (*"X %$)N__XM3?_X2H1M"G[_+4?_]& /1$A$*N__1@ #J +M/7P "O_R/7D G9._^P]>0 "BM#_[CUY (PSO_P+7P G90_^ M? "BM+_ +MY"U\ (PT/_H0J[_U$*N_]A"KO_<+7P G9V_\@M? "H=;_S"U\ )V"/_0 +M( 12@&H"5H#D@%2 /4#_QF ) ]? "__(]>0 "=BS_[#UY )VFO_N/7D +M @M4__ M? "=B[_X"U\ )VG/_D+7P @M6_^@M? "=CC_R"U\ *)8O_, +M+7P C"0_] M? "=D3_U"U\ **&O_8+7P C"P_]P@!%* :@1^#]"'Z(!4 +M@#U _\9@%" N Q^ K"'9P#_#GX*L(=G /]T+"X $$'N_^PN"$'N_[@J"$'N +M_^Q<2"@(($=P # 0(@9,0! ($4P@"!'< P$$Q 8 94A52'OH1EWGX"+4?_ +MM'@$0?9(N"@(8 P@1$I09@Q3KO^T581*KO^T;.Y*AF\R+P9P # N_[PO ' +M,"[_NB\ < P+O^X+P!(>0 ""N1.N0 BJ @;@ 8?@$@AV !78\+0 "0>[_ +MN"X(0>[_R"H(0>[_N%Q(* @@1W ,! @12!00? * ")'< P$2)%(E%#\0H +M,"D I!0W$!4AUB%OH1EU+QN_\9D!#U&_\:\56(((&X &""-8'!X #@&!(0 +M $ XXP&A @8O!$ZY O"%A/* !F"B!N !A"D& !/(@;@ 8((1P # M +M (O $AM 8@;@ 8(!!<@"\ 3KD ("P3^\ #"!N !@@4#%M ( B!N !@@ +M4#%M 0 !"!N !@J4#J&0J[_P$JN_[1K 1&< P+O_R+4#_D' ,"[_QBU +M_Z!![O_@+4C_F$?N_[A%[O_(0>[_U"U(_Y1*4V< _AP # 3(%(P, H" H +M /__<@ R$R!2,C : *! #__Y"!+4#_L' ,"T BU _ZQ*KO_T;"Q@.C M +M 1(P$2 :@1^#]"'Z( M0/_T8"0P+0 $2,!$@&H"5H#D@"U __1@$" N_Y!^ +M K"'9\Q^"K"'9]P,;@ "__)F*G ,!,@;O^4(%!!\ H ,!#1;O_^< P$R!N +M_Y0@4$'P"@ P$.E(T6T ! RN ?^P9UP,K@ '_K&=F("[_D'X"L(=G +M #0?@JPAV< ,Y@ #0< P$R\ 2%5.N0 ?@103V Q1"IW ,!,@;O^8 +M(%!!\ H < P$"\ 2%5.N0 ?9A/[P ,8 "[B N_Y!^ K"'9]!^"K"'9[9@ +M +:/"T !B\N_[!P # 3(%(P, H H /__(&[_F"!02' * $AM 9.N0 +M@+!/[P ,.V[_L@ "("[_D'X"L(=G''X*L(=F *2< P!B\ 2%5.N0 ?190 +M3V GY"IW , 8O $A53KD 'V83^\ #& F9";O^J8 8]?"<0_ZH@+O^L +ML*[_L&4$("[_L%: D6[_JB@N_ZS8KO^P0?5*!D)H__XL!%6&:P !M' ,"[_ +M_B(N__22@"U!_YPV!"0N_ZQ3@B@&XX0N!IZN_[!2ARH"< P$R!2,# * * +M #__RAN_Y@H5$GT"@"\@FP"*@9*AVP -)^ & ,Q(;O^D( :0A4AT"@!( +M=7H&FH=2A0*% #__R\%3KD 'C.3^\ $$IN_ZAG&$'U2 9(: $< P+O^H +M+P!.N0 >D!03TIN_Z9G "20?5(!DAH )P # N_Z8O $ZY !Z0%!/8'9( +M;O^D( :0A4AT"@!(=7H&FH=2A0*% #__R\%3KD 'E(3^\ $$IN_ZAG&$'U +M2 9(: $< P+O^H+P!.N0 >FQ03TIN_Z9G+$'U2 9(: "< P+O^F+P!. +MN0 >FQ03V 2("[_D'("L(%G /\L<@JP@6>*2?5(!CBN_Z0^ W , -!]0H& +M2FC__F8$/@-31[YN_\9C#' , >0KO^@.@!@ GH ("[_P+"N_[1F0"X&5(=P +M # %OH!B-# L *P;O^J8BIP # L )R #(4@(%G'#H'2J[_]&T&OJ[_G&X. +M< P!0!U $*!CP%8 Q3AE6$2H9J /YL? @+O^LT*[_L#M )P # M )! +M]0H&2FC__F8(4VT F "4D9P # &0?4*!BX(2E!G\$I&9T)X #@&< P+0 " +MD(0O "\'2&T !DZY " L$_O R=;0 "("[_D'X"L(=G"'X*L(=G"& .( 3I +MB& $( 3EB-%M 12KO_ 5$M8KO^46$I8KO^8("[_P+"N_[1O /OJ("[_^+"- +M9U(@0# M *P4&)((&[_^#%M ( B!N__@Q;0 $ 1P # M (O $AM 8@ +M+O_X7( O $ZY " L$_O P@;@ 8+Q!.N0 @-)83R!N !@@KO_X3.X\_/]H +M3EY.=0 3E;]R$C7,. L+@ ,+7D K,\__1^ 2U'__@M1O_\2&[]W$AN_>!( +M;O_T+RX "$ZY !RU"!N !0@KOWD*FX $"HN !@@+OW@?@6PAV)\,#L*!D[[ +M ( +@ , P 1@!8 %@@+OWHT(8J@$J&;U9+[OWL*$5!]FD@_>PN"!C=N\=E +M^F! ?@$JATJ&;S@J12A&V<4:_ PN\QE^& H0I4N.0 ""RAR"+R!;0Q\"& * +M0I4N.0 ""R1\ RI'*$7>AAC=N\=E^B!%0C!H " %3.XPX/W(3EY.=4Y6_<Q( +MUR#@+"X #"UY *S//_T0J[_^"U&__Q(;OW<2&[]X$AN__0O+@ (3KD '+4 +M(&X %""N_>0J+@ 8+BX $" N_>!R!;"!8@ GC ["@9.^P " $0 # , ' +MB@"*2H9M#"!'("[_\)"&((!@!B!'(*[_\'X 2^[]["P%8 @@1A"=4H=2AKZN +M__!M\B!%T>[_\$(08% @1T*0($40O P.GP ;R-;Q1^ =Z%W(4@1Q"\ #!2 +M35*'OH9E\D(U6 !@)"!'0I!^"+R'; @J/ ""SE@$BH\ (+/6 *($="D"H\ +M (+1B %3.X@X/W,3EY.=4Y6_=PM>0 "LSS_]'(!+4'_^"UN S__$AN_=Q( +M;OW@2&[_]"\N A.N0 <M1/[P 0+RX %"\N !!(;OW@+RX #$ZY !CV" N +M !1.7DYU $[Y FX$AX -.0&7R3G5.5O_\+H=![@ ,+@@P.0 " L ( +M !9AHP.0 " L ( (9PH >0 " ("P& $</]@$DAY ("L"\'+RX "$ZY +M ]X"XN__Q.7DYU $Y6_^@M?'______["UN C_\"UN__#_]#U\ $+_ +M_$AN_^Q(;@ 0+RX #$ZY ]X"!N__!"$" N A.7DYU !.^0 )N!(> % +M3D!E\DYU(F\ !"!O @@+P ,;TPB"9*(; !$2!LH!M !$,@@( 0 9P02 +MV%. (@D( 0 9AXB .2(8 (BV%'(__Q"0%. 9/0@ 0* V "$MA1R/_\ +M0D!3@&3T("\ !$YUL\AN%& "$MA1R/_\0D!3@&3T("\ !$YUT<#3P& "$R!1 +MR/_\0D!3@&3T("\ !$YU(&\ !")O @@"'+_2AA7R?_\9@#_^%.(<O\0V5?) +M__QF /_X3G4 "!O 0B;P (( AR_Q#95\G__&8 __A.=4Y6__PNAT*G2'@ +M!DZY "-4%!/+@!G$"\'2'@ !DZY "-4%!/8!A2N0 ""TP,N0 $ @M, +M9@9.N0 )O!(> &3KD (U&+P!.N0 C>Y03RXN__Q.7DYU $Y6__1( +MUS" *GD @ 2HUG'"AN A*E6<4+QU(5$ZY ",JE!/+@!G[" '8 )P $SN +M,(#_]$Y>3G5.5O_T(&X #")N @2&+(19@H,&0 ]9O0@"& 22A%F# PH #W_ +M_V8$( A@ G 3EY.=0 !.5@ 2'D @+$3KD ">46$\O+@ (3KD (WX +M6$].7DYU 3E;_\"Z-(&X #")N @J2& ($!6P$6<&4DU*%6;T2A5G +M!" )8 9*&6;D< J;O_P3EY.=0 !.^0 )N!(> 43D!E\DYU3E;_W$C7 +M,( N+@ (+6X #/_T( ?E@"I !H J],*$ M5/_XV_P J_,+57__$AN_^A( +M;O_T+P=.N0 -Z!/[P ,2H!K0" N__BPKO_L9@H@+O_\L*[_\&<P+6[_[/_X +M**[_^" N__!R^\"!+4#__"JN__Q"ITAN__0O!TZY WH$J ; 1P_V $("[_ +MZ$SN,(#_W$Y>3G5.^0 )N!(> E3D!E\DYU3E;_V$C7, H;@ (2^[_X$J, +M9R1*%&<@*HQ(5$ZY !0D%A/*T !%!-*KP J)L<@(K00 $4$T@.0 " $2P +MN0 "H_!D$B Y ( 1$'Y *BA"AP# !@!BA\ *B;RJ,+Q5.N0 4)!83RM +M 1032J\ *B?7(!*T$ !$'N_^ @#9"(YH!2@"\ 2&[_X$AX ).N0 CJ9, +M[C _]A.7DYU 3OD ";@2'@ >4Y 9?).=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 +M +M +M +M +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(RE-8W)T,2YS(#$N-B X."\P,B\P."!#;W!Y +M<B Q.3@U(%-U;B!-:6-R;P " $ +M " +M !D ! +M !I;G-E<G0Z(&)A9"!B +M;&]C:R!S:7IE("@E9"D@870@)2-X"@!B;&]C:W-I>F4],"!A=" E(W@* &)L +M;V-K<VEZ93TP(&%T("4C> H 9G)E93H@:6QL96=A;"!A9&1R97-S("@E(W@I +M"@!F<F5E.B!B860@8FQO8VL@<VEZ92 H)60I(&%T("4C> H 9G)E93H@8FQO +M8VMS("4C>"P@)2-X(&]V97)L87 * &9R964Z(&)L;V-K("4C>"!W87,@86QR +M96%D>2!F<F5E"@!F<F5E.B!B;&]C:R E(W@@=V%S(&%L<F5A9'D@9G)E90H +M<F5A;&QO8SH@:6QL96=A;"!A9&1R97-S("@E(W@I"@!R96%L;&]C.B!B860@ +M8FQO8VL@<VEZ92 H)60I(&%T("4C> H <F5A;&QO8SH@8F%D(&)L;V-K<VEZ +M92@E9"D@870@)2-X"@!R96%L;&]C.B!B860@8FQO8VL@<VEZ92 H)60I(&%T +M("4C> H <F5A;&QO8SH@8FQO8VL@)2-X('-T<F%D9&QE<R!F<F5E(&)L;V-K +M(&)O=6YD87)Y"@!G971F<F5E:&1R.B!O=70@;V8@;65M;W)Y JVL +M 0 " 0 +M 8" +M +M +M +M +M +M +M +M +M +M +M +M +M K-, "!:0 @6K (%O "!6, @5O (%@@ " +M!8X "T *P @ #!X #!8 "T *P @ "T *P @ "T *P @ # Q,C,T-38W +M.#DP ",@*RTN,#$R,S0U-C<X.6A,) P,3(S-#4V-S@Y, C("LM+C Q,C,T +M-38W.#EH) *&YU;&PI # Q,C,T-38W.#EA8F-D968 ,#$R,S0U-C<X +M.4%"0T1%1@ (" @(" @(" @*"@H*"@@(" @(" @ +M(" @(" @(" @(""($! 0$! 0$! 0$! 0$! 01$1$1$1$1$1$1! 0$! 0$!!! +M04%!04$! 0$! 0$! 0$! 0$! 0$! 0$! 1 0$! 0$$)"0D)"0@(" @(" @(" +M @(" @(" @(" @("$! 0$" +M +M +M +M ! @,$!08'" D*"PP-#@\0$1(3%!46%Q@9&AL<'1X?("$B(R0E)B<H*2HK +M+"TN+S Q,C,T-38W.#DZ.SP]/C] 86)C9&5F9VAI:FML;6YO<'%R<W1U=G=X +M>7I;7%U>7V!!0D-$149'2$E*2TQ-3D]045)35%565UA96GM\?7Y_ +M +M +M +M ! (*# ""@X @H/ (*$ ""A$ @H2 (*$P ""A0 @H5 (* +M%G]_?W]_?W]_ ((% "\ +P O $Q#7U1)344 3$%.1TE. +M1D\ 3$-?0T],3$%410!,0U]-15-304=%4P!,0U]#5%E010!,0U].54U%4DE# +M !,0U]-3TY%5$%260 3$%.1P!,0U]D969A=6QT $, +V5T8R]L;V-A;&4O +M "\ +W5S<B]S:&%R92]L:6(O;&]C86QE+P O "YC:0!*86X*1F5B"DUA<@I! +M<'(*36%Y"DIU;@I*=6P*075G"E-E< I/8W0*3F]V"D1E8PI*86YU87)Y"D9E +M8G)U87)Y"DUA<F-H"D%P<FEL"DUA>0I*=6YE"DIU;'D*075G=7-T"E-E<'1E +M;6)E<@I/8W1O8F5R"DYO=F5M8F5R"D1E8V5M8F5R %-U;@I-;VX*5'5E"E=E +M9 I4:'4*1G)I"E-A= I3=6YD87D*36]N9&%Y"E1U97-D87D*5V5D;F5S9&%Y +M"E1H=7)S9&%Y"D9R:61A>0I3871U<F1A>0 E2#HE33HE4PHE;2\E9"\E>0HE +M82 E8B E92 E5" E6B E60I!30I030HE02P@)4(@)64L("59"@!# &1E9F%U +M;'0 0P!Y97, ;F\ +@ ""B0 @HH3F%. $EN +M9FEN:71Y ""D0 @I- (*40 !);F9I;FET>0!);F8 3F%. +M @8FEN87)Y(&5X<&]N96YT("5D( @8FEN87)Y(&5X<&]N96YT("5D +M( @9&5C:6UA;"!E>'!O;F5N=" E9" (&1E8VEM86P@97AP;VYE;G0@)60@ +M (&QI8F,@8F%S92!C;VYV97)S:6]N(&9I;&4@)7,@;&EN92 E9#H@)7, +M7UA8+F, "B!?=&EM97-?<&]W97(@9F%I;&5D(&1U92!T;R!E>'!O;F5N=" E +M9" E9" E9"!L969T;W9E<CH@)60@"@ ""RP @LP3F%. $EN9FEN:71Y +M $EN9@!);F9I;FET>0!.84X 3L %A &>P"AK2 >' T 5S +M.]L2+C^CGYWB8;+<XBIC!+R4)M6;87 EEL+C=;D4"RPA'QUJ8+@3.Z*)TGUS +M8/'7W\;*WRL&:8<W)+@&[6:3;NL92=MODXV"=5YTFC;%;K<Q-I!"Q<@H>8XD +MK@[>A,$;D\-GP5?#RZ;WM9#@[BPV3-FR7PT0EM1=L+=XT&,&92PRFI$L>;6R +M23$ _B$HRQ&O9':DX48 (PEW4QW. $5WCL+>K<\"+?2%BI@W<X5[><Z4BIP6 +MYI'3M,T-X$,.74P^^_E4^MR=*>L9B2FOG?1H?'WU>D^'D0)E_IK=4.<3RO05 +M'9*K:&*D@&AC4$6S25MP*,WQ+QV0DT,>20"BWB80PD!J% P4GO"^;T@!R\"# +M05[^X&C]_&:B0\"Z)J&Y]>9[+VJ]$ETM/?JAN2<,Q@#=(0#0_6;A>O&?_9ZW +MOPW0T5#_.K06G=.1.$O6I.3T03_N!9(H-;]4CSYX']Y32L+\QM,I!/!J_2AA +M-;L66 \>9'95LV0ON9>1WH]Q%":^I*_]!B92R719S%5#)/4S4;\BA&/'9)"K +M8O0% -R+,2B^<IQ3JS4C CRJ\S]'J!H!3(FNR>6CGMS+X'^1,JU\!=WQK#60 +M'N&*M]#Y6 S,%6;E*> "G3EN0U1-, U\R@%F(;Y, =L9'$$4F\,AT*2%7H [ +MDQ+_3WH/A4BV2."13SAULF_&4P%X<9VUK*0@ HU=Y&(*#J^*(FX ;4;0'6&[ +M0>(^DIS5APH1(U18B6/!*@Q*CQM<"(.ASA839E]&2<10EL4->>Z[44>KY7"B +M,Y\>Z<]#$82]V$,*B>$2E\ 6J??K%A;,>2=7SY[HUH, #)F!<'U,4"T9^@_- +M;S8TYBE<@@?"WIU'3%+9@]'-0\?J"MY+EA?=D371>@OH!;79K<BI1G/2L46& +M@N?&@+:!K^OC!FF=7OBRQ*>4]JQ P"WWL\\:A;CQ UJJK&4Q&^MRV&\(U$W+ +MM>Q^]O4>1<J,&RADHG,V4 :SB(!!:31)0=EU/-]2TGZY/J;LI*U))A3O;NA5 +MJ7C=8;U9.8QB=/6;0U#97)QZ1M$!C<*8:^KK.&+:E-XI[(J0FK<_)?/*&ZYK +M:,/NHXFWLZJ[#X_[S-'K;AT#:Z8JY!=':B*=LN,JFXY\4<?#[_?$5VF)?U7U +MXZ%KIYSK">@[^L\N?U<@9JMI&NH0")HU#5@WE_CDY4HBIV[CJ%9N=,+*K%;F +M#VX.$S8X.1)S8O775'BZY-MS-54* ?!8FE#:]GIRDZ1C19A<ZZC."%>@R^HD +MNB.2PXCB0C'00;J'%U#N3,EP9/G<N>]I@=#7V\1-BMZW6DI..F:4%$@T2L<Q +M:"[%'CP^2^!V%CU2["U&/@SBCGGV-^#J(IPB!.84.63@M*6O6+=\:8GJI0^^ +MOM_A ;9^M8JN\WIWQJYBC&N_LK,_D2MLJ"=:$+D6< >RNFU)<Z[AJ<1A$OF +MX9Q'@Y'U)C)0'>5*2J2"ZW:\.5_5'KD_TF_HV>\;#D-BFY2=J Q*)D)QC"=K +M?-(J;0"N)N!UII3R)SII]MQ<G^>X"I8>9WD]UL4<XQ[1X6\=AQDNA-4M1ALF +M)2O\#^OF:)#(#1+B=N$A:)VA?.Z&#*FNY;BM84&%%TCQ;.L7RT"G;?8@K/&@ +M_20K4L9922+/W]JDZR"Q45/_.L?( 5+P#G!9>G/NCW7U\=@AL).,^?!,1IMS +M1V;:47\4< .NS$\%,1P!0!=;UVUB;-69&X^5<FC. GN%YTK+$*:0%ANY.AZN +M*OKEQ^BRD%56 ^;OHYI0.P-MQHN2NI;6JZF]L-D_+;?*&-Q0T#E'C>26EG!T +MTNK:K1JV!$K>\JO-8CKS[DD3MUBM.:-)0[EL>4$W=*2N5= -+:]SWVNY:F4D +M[I)T>0 V_ -L!> !;=R=)QT0<FFD^A2.^) NA=^K E*NW(\PV_7P:\2NF"R +MGP.XAR'L)DJ!$E\/Z$Z/UL,OD(!D;2?"!!/@#M_#)!2P#9E3NG^$\>TXBCUL +M*6;Y#2 +X/F+^XOQU)4H*N8?M5,<\.B<W!53K4KAGG*&7G^#OEP)S FCE&[\ +M;.5(LX8R><]I\\H@0#_E#1;X:HE,#GGW8HS9TZ4+%3Y!4>K?W+/&RP9N1,'! +M4XR=:-DEK1.G4@&._[-QLHT5Y0/9?3$><V$_[XUR;$Q$!$> -@-.8FIO SL/ +MVJ(83Q?)I 0ZGE52J(=]4$JKU.>)A=G8M@"!+P<^M=7]*J*XK^<(,P, []\U +M7@^F9$R.2E&GB".>L0PQ=C?<7-</C_V@7-V[VN_IK^)ZV2+X-(O$'2.M!D9R +M8T%OSB]E@FI"^\ ?*(S-_XM'<1H?Y%L*B/T#YM\N>CXR!SDU@$DAROKK=(% +M-3*$*P.[U<IX(:?)',_P%]C!U#?ET'6R.&UJ]PGD[,XB/&I_44EQ]"GZ:V5* +M2E-+"IO)LC6/1X']WO&[<YEUU)#.P_I%/_P[8U4A=Z:BHMIBG)51Y/F0]+<2 +MH><PI*#QMFB-@N.4&ICMC0VWI)0)H%$71$\GS#NF-[ID">,9XDL(G1DKDC<P +M=>7=@@5 O3;W%KQ D>6<>U'-_DHPQ@>VC%&P$]2\V5?(6@'[)LNM5ZH!B&AT +MJ#$N5#@4]\H\#CFT;_ZAV0>VTVI"EL:VY-85%D3^W2[0N<G#(GK%\VL7YGY[ +M[@O?.WD'!7?!\J9\W"R13#^TT<=2^1;),AI!;\2K,)WP;E%K.+)&5K4F<9HZ +M)H>:N9\HEL6@*6_(@"92XR%O]BS>-P=^3A$E1"DZJX/%MY;I\;VX@^M,\/,T +M2.MTFQV1+"U4OBG!VHEQJL[ ^W*L>$$1WP2IJF&6\$0(&@\<0&LS9R:C&!FF +M94KTLTE:TQ!V"0O"Y!7W6'::B+A,2C+@RCO4;"5'#_(NN2Y;L9]V0YF6G]@B +MZF.#X+'-'.+I7NA>6FH\?%[;#+?0LJ\W(- 7 *2A +5&Y[KON<DX48B"0*-X +MJT"Y=419VF0(N-C,D)S*15>LDCP<[ MQX;T]X? 'BG;Q.8244>Z<AGXO7F6+ +M)Y%5*I ^^Q?!$"-S5 =0(2YM%I/57/[TK055&7F;([.[ZJTD@L=2H?$FA:Y- +M5][\>#T='0#P31(26HJ$W2%&P*/B!(!_0YO>Y&XX:J'NF8UGZ7ZN,V[>UOHP +MY.X\#;+&;Y4!U'?V_E#7L3@G\@S&8:+>0WKC1XI^<,J^@BOV(>:#="EQD[^! +M$+IY3#M=['4DI7T3Q$GO!F!LAW.TN*7#T*-\?)8[G(;OU$I<=3Q;L@X@31LD +M?VKL7.?1DI(YYVB4]*!9L& B%<E8AMV.QC_H;24=$(D<UBK]6S:M$QK2B],@ +MBW0J+F@7!/?!&620TF)YRCI' ZEUG]D Y5U#AI#9B'HF$6$ALQ&&)*C86#<7 +M9_T80?[&O$= ]S$3J,;^K%&7A8]3R,,B8C2.W"Y_"/ 'BZ;W<)$6Q<\66I0W +M[!K)AZE)^LC\@>'UM;B-X:Z3%UC2KX >2'=WO$/8=@M%PW\9JYZN1*B:VG<; +MSJW) 11"<DS#Z4638#5,^1M DLA!79G(R9PGDT"8UNVQ5YE2*R6+_4'7-$6Z +M2]71DO&=6#@V]DE;H;AQ[%J[N:IB(Q+0)R"!+0OUQP8[U5>&$]_)#\L25'?2 +MI-U94$76?330G?@7)N1" !+&[1]_BJH]Y<J?'7=0*6S(OTQ?O.Z_M:J(>B<@ +M[R<)A4BLX"+I'6::?#I0U-"U_#Y0)@EYHI'A7O.8NQT CH5\%6F\H= Y,7>1 +MU+<5 )#.&HGS,PNB3?G.*")GBS+T[2-[F$[Z*PP7S'F5MR^? C/U@>$WKC5^ +M-V:LDTHZ*LFDW@M@[KA2#K9LK_$UW)1@[L,+:-*65E>VQXMK9Z;G+QGEE8R< +MS80)L!F>AO=()C280I"P@URD+1VB&F1I\,;[1=&%EJA(Y#6-[U:\DF4 "7,! +M) 6LD&A$[:Y\9W&B8ON,6E%L'VM%/65',^A_"1^^QE>OICP!)%O\Z1V\8+QS +MY33SQK"M9[O3Y,VF/.\4^]TNTJ<FR\ZGR,\GT_Y//B) 5T7OI?D>-P#KUO4; +M'.IBAVV4MOZWA"&A(W:#2=$!B'* R'=]@!2J@SI[16_?<S *\OU$VB7(>\OV +M\,)&GET9 E7U=WLR_BA9?* ,9#4VLR*TW2C@.[U&&42 \5;?CY68L5R5/$;+ +M<08))I/Y*F9]7Q-[VNIE@",[LR(87+0IL4-)>F8_Q&I2Y\-K,EW_*!<EQ,^K +M?Z03.V43Y:!-[@&G82T"-R$[E&R0? @*NW_O88<NJLINA)WNI=1 [\&NH,=_ +MS1R/@(R>?-U^D)93=5>:YR_OT&8+RFFPS#X0D0FE,2_?>!6CZ)+?O\C4$0_' +M^O;XIW_@NQ79D L,EI .(H+EV<8P5C@+0_LV>&(J Q]P:TU^? $?97HBY%AN +MI(O5GY2$TQZ$Z@F_44\S[^R71GV5%FJ\6_3NA49CHE1+<%+51[,018TCC3OV +MB@2:$>+@+2FX_+ /)[VYA0BZ]2SG3E?J7R)10;.[W!2;F@OSVRYHV<&=LE;U +M6K:1Y6/[K*>[.")[A%8I8'3%YC'9!_0^#=1P>[+,KCEW5UU<NL*\3Y2>LZG6 +MIZ6XDE-G2?HSG T^ ;QY1NF"87I<MIGA>)<%8XP+*&S?XHA]TIM?:Q?"&3'F +MFP_3"B*3^DRQ(G;H$UJK,^C$9UJ)K1B$)HI,ED*;)W6GZS,H_A$MZNL4G\T@ +M?<V^A,CJ\%T'_'DJ,S:!HQ7-@]HV3&ES5P?;[9ZT#2Z-0GDB]!APJT)VI>MX +M87WD+N<OV#[B]FA9(5./,??^-0P3 H@L^]!#FJF%E" ]]N>)#2?*Y5LBHO:V +MK452U;-*>D*T=LX(S/=9+EDN-'D4]BTO $OU1PQJWUH*._0-H[9CR2./\(&( +M,27W6-V5!QVKN)P]232^I:-R7C@^$M:XU]KQ/8"9)2'864C7O"UGI%E2"5?K +MC0_*9"@)]4_^R:*CUSX]PNNCF,9Y';4ZS:Z4:$,1F-X2T.,"P,JA[RQR#L:I +M& 5HI ?#12&@G!S)6S_11$*VT^+=NXY/80"(0TK$RP9,3@'MS%\S':P^TK,V +M=U+-14TR"4*[NP>L>(Q2GU(3Z"'H)#ZN2)9HCDC(8;GP$?$1K@"5YZ*LBZ^D +M8?:3Z#5.]D_C?I0FBP(I: V(SX)NT42Y#PQS*>G$:Q!J0-LI^FZ\S,0$39VZ +M#=C6]E+X33K4=Z+Y<-S&M.2;06!SCD3:F8S?]MWMV,_@0,9217J"?.&<OO=W +M*CB<Y'6UJT@IB94%-[[1=(R<'-%Y6#=8; @@<"39O8M(%8MDZ?FS7&&,.]T( +M*F8@9 I[C7^4E99:TD6HOEW%FJ!\N45[X(3A35'U.;%"K$8B#'/9*SHA*E25 +M_]G5((BSLJYSQ[FQ?&?&L\X957F3;<6#S6%-D,DX'@SDM%1J^!PSWRCF9619 +M"CS'DO&ZH3=VZ@>5 +PEI_L'2CRK<M3W8!5EM.,<_/<Z)BU"16#6Z6;81Z@U +MGPV;%WQQ-EHJ421FM62C@H.]"H6\;3YEF;<%:>P_']^/EJJ._]MV\(Z%-L<_ +M =TU*QTYA]UW[R@G(O'D0H_EO<?I&UHVR8<A+XHYV$#.IRK4UEH'GK3A(\$X +MN/#=!HW]J36;'HU&PB:HCL6\RSHP$CHT8(]_,5NMW"OC.705]8P7&G9VD$<: +M^"E/FFBK?[!%L@-1DRF2PQ3"\K:%@P0\0]827"(9%H4^;V%@8-?$YZ1&MQ^' +M 5>VG*^;KJ^T^;'._ /1M<$RWY=I*_E)PTX 4KPBP(",S<X"U^[+C8\S;_C3 +M^I /'IV"]9?HJG,-+7N3F.Q/&.]BON*H%4R.B7$\BW44R<*U$$0L:L&A4^[ +MH@OW$:-2EB/XLYP#U=49NS?J"YDS'Q;PU[';,_19K(#"=:5@@^MV"GHC#\&G +MSE1LH5>'5P<2<.6B3IT1+?D1ZE:F9X865W>P++PPE50H"T3V&0A,B[?'9VU" +M-)#K_<IJY*>ZZHZJ>W[0%,W3":$E:>'=AZ,Y\!;A<V#3F\)TN?^XG76P\IOB +M2WGVEGAEB@[O/6M HT.9PC&H6\F:H--<:H7(--]5YZI,9TKC,%R/#=B'VD9_ +MLS5';E\CQ]9H]^049]:ZPJ$3&Y(H]Y^$RFI/C\XG%FB"$.N^[F2!:59L"?F? +MCL$2=?:@]GRB"-Q;3V;[95]B[U-N$PC0=N/XX.6;!%:\.&Z;0 HJ%M'F%X&Y +M07\GX_ W(.J$0P"%7J0>0@SUF6*?.FT\@83>X9/#29._1K,NYX8%"^BPT7\< +M&=NV4Y,"XA$76-4[3URQQX+;Q@A#-\$;^[7GRG/#J2<GVHT ]02'0HW(3JS" +MR<"+D6.E$3,[K>9("O!_+9EG),]AF)CDWP%:;POVQH[GFP-CSVT;MTR;B].@ +M9"7*NV$Q 9?:<>TL^*$P^%UQ\,]O5 &85X.ETWLES)0<T53#81ESI)()Y(V\ +ME]"MU!%RV.O&0SR4 ))O5I>'5+AH_<NEUAMR?%_04/Y$ ,!&9UM$ ?TU$&B9 +M1OW3=.XJ#D#3);X#P!EP8A]1L=;47,$+SS>^VXZ=EHQA[. 6VX@&L[12J +M,=O8S)N8:EF\\/'BG/"=3A1F"ZEHZU634>+WIM8O[Z0LQFD*JS+$$>J"P_ZY +MA\Q!+L.G:2#!:#Q<:2B+UM2>#V1\54#B<DTM2VMGX(4EY.T:>ERIR#QPJA2P +M,V:ZS0-/0<#M7IWK#P%POT[H!'(.D5F M)J#]*%!FV&*-AF6V/VO ];(H>Q. +M.;^4.[F8QG#;,>,F+C '4@"/&I\!\<HCVF.O5KO$/"EU%;]KB31- QZ<D]I] +M<^2DMKZMX>(6/>\/856*1M<I;8PJM@'JKWJQ+^RM53 83^W6VHL]%$<:,6RW +MF8.S!O@I&@RR6>+0KS+E.14X]O_8Q_$A%F@Y]V+_D7Z=Q^!]/-+WZNM$]="? +M'_V'+O#X-AJ*CVP#D(WP.]CFVZ"B@.J( UFE/Y4,E,6NST#AU1"61S>:'WQY +M@?A&'&5Y79!+I<$V)IVPD/]E /WY4$6.!?N-13"6K\*-Z+Y5]9WX2^3)"T)R +MCD[EYPF4"H>N)+/Q>)GK=]:7A:A8I^2QO3@ZJFSO7%7V2Q&V-$+)DYU!S7P" +ML\GS/:I4W#/>VAFMDGB-R%<7"2>CY>B4U3?619>[ &[I/A)1P/8*I]+>.@/3 +M/4&Z.9@*C/SA5OQ7@V%NLHAFX'G"R4A@U1C>S!QL*[[A'ED%/I$G2UK%5+&B +M-+8S88&L<[\L\[H;YR2I*R;^%.(6WTBXU+&%"K[DYB6#I=9WYLM;<A9'')SM +M9# 7?O YWH-EP.%[(H;R>"TR,;V,NGK*#P"WBX$= T#,0>RMG/LIPZ_=X(>* +M&*QP+(])/% YDL"4/H^']<*\O-A[ P1"UZHL&)*?N)63G]E0R+Q/I.F69P+: +M"P96[ZB!HWCCUEQV.P44N)$CKX##OJ\.!3EYRWL?T'E ):H+77VQO8,&.-2C +M*A318 N-0S/D9BII8^1PUU-J$8LY3/9UY&&<Z.O "(P]SSUHE[^FK[F;BV.@ +M@&;%;OB/]<]]7@%.4JKRXYS(,T1L72:4#%US\6PB=Q27#Q*>O?(RH6B'T!89 +M<D$@1A@KI=0E2BM-Q/+6UUW]HX9]2Z^="%A:,FA)K]KCQ;TAQQ,RW-/,[$7T +ME+0E/5X2+VG;=<O!!7NJ;I+QN!EZ*"^8*$.B/N(, 'HA "O0%5D4A#5[]3E@ +M5/AR+=[Y^F>E&#;[Q?SZ.JXM*.*/!4*H03%^<G.BW)W5+N,EUN-4R5,3P423 +MNT(T#;J;2&^L"1S+IWG]MI4MM[*>?@(9MV;0#UMY4!,Q3O8]5*J\T!1\KG]X +M7%:3(U D)__0HFA';GHOE*J.F ;QHCM]Y[.1\5L4*TX)HN,Z>G-NQ+[?]5Y2 +MW*0I/1BN$]U,83#7JB&CL@7F1PAH0-<0&3HB RQ>-R$ENB4[E15,@K5$74U[ +M/63;>I/1Q#S2K=HE92&BDF)<H*)CI0'SEPQEO02)*S8^<E$SDIKL0VWA ]$% +M=BP+Z7LNI$TGPB=8I)5,2Q6(5?M/7>V@LKI=-2)C'U@D5!_]W55+^9R(*)O* +M:+$-5(J>J1$MGW_1; Z(:,!5W,%.33]OOWB[3YSGB?N.VZ>[C8# %XTY@T.6 +M')?8$$ 9;0$H0U"X9E&"7W.MN!D:L=\KE=7< G9/4DUSPD2)U#*V)N@X:=_V +MSG9:OS&;VX8M-WHF^B0H+6E&8ZZ<>V0E[4*K"; I-\PFZ.H65UA3"PVYI!*/ +M[X,$IF^NGS3#Q /(FTWH8 "8*68E0Z1IAHA34HNIX G_9N\PNLI+Y!,=$+PO +M*"F9<<>'#4%-I+KM8R)]!)W5K'!\_30C-O[Q>VNS?>5[/DE/F5/CZ83&=L$# +MR#>0*3".3T^&^;C>57SW8C[)QSD5S28'>(:I@F?2<O##2HT$7%)12?I([SO+ +M7'39@U\_J'ZU&,W.#3U4FL2U/U^I&5-%)A$4P(.$Q-_Y6>O%TQ$,!PP)NM U +MV-@\ >)MJ4O/.5#?=OW^H@<]G]4VI7[]_?;>T8^%IE$HO(&Q"2^J\ '"2"L0 +M-)]J!B:PD=8;)>!'0!"Y RYP'VO^Q4NGWW8/-)0J9/':ER,QMZ_RT673">;X +M.;LL$[/P,-FJI5M:.+ARKA(3K%76V84\&&' ITE8P4^EQ8P;#U&^LO$0#M@> +MB-S#!==R<"()C "J<VBX,TP_:0G!#*&O,+P0T=P'9@K'^&UU#/;YJ5;<=G3" +M^DT(2+#-$1,YPJ'^1#K7=7[7]!Z4<EMO"WSA+*>7#[314PSVNW\4*7T=>!'3 +M-PG]Q@'/\HU/H %]K ]%2DCPN84_-T!A:$( ]6(P5.A!!U\"A?@Q0_ $6L-W +M"GZ%RR7*5, SK)QDU;JXM@B&5H"O1'P.734M!53B#E%H"./(?4""\W8[GU^/ +M=-8 E.445",X^LU"@[RW@[VDT.<:JNN.;B^](B?Y4T&.;E"!*]#"_'E!O-'P +M1DZ1-[H<XE '*!F .>FU20>Y0IZ-7SG)17JAN7*4-@H88.HC8^Q!5<-SJM"$ +M7HF-5M5A'9<_"^\+]>*0%^VCA'HAP,2V"R8DC"5UT,$"&[RZORG>%:&PZ8UD +M?DO[7?$$%UT9^1C&"P;-Q5;NF7[C"HQ55R8&0SI8I]XQ4'HY!/(JH2!2DV'" +M&95V7X?9(QL!Q(EV@=H)_=2ACLKD* )+4#3;79(]W[;Q!DZVFJ>,Y7:NJJ[, +M6M(*<0IEW.-372+^ >,@?_W3W(OTM[&:UM1O8@RE&OT"04R/H=I$XBQT@,V +MHFD$_WC:72]JTD\A0["ND0IX$9WQ0+^W[:_J%+9NK]ZM5Z@I>^=Z&LVB'/+7 +MX?00)8O_6+AJ.*2^MJ)H .]ZZITPD2>)&*F3O!=W[P T3V,GOX>7#*GQ.O'] +MXA,/*SY89Q@__]]MUH]'C%)0I);.@#DD$=M6!B_'F+$HZFP(0Z-H[,MS+&23 +MZ5/$)X)Y)C&"3!'!H-WKUCU*B1?Y9A L((0V4+X)BH ?M*2MQ!Z<?[,P':]* +M$KTAFLE+N1P/F75CA7RNA1L+G4]0#QV?RQB+T"54/=80#!OW=TOD".OGS2<, +MO'R^KM1)5H94;9T*JV28(/Q<&:-Y$@GYKW2F87)RD*ZPP2L1O$TDIT(6D]U^ +MFGK0<COKXX?HTT4<</SI&&*FMMEE'P[>*1,FSF2K>0)_)$#J:+8;?0MA^<ML +M<3>XRO&.3$]?D**U9/.J*;Y5H1^OIM VJR8<QR3R-BUZ]#'?V2IX:/F_)> : +M"WS_QLW7PJ>A3"@R4-58DS"X33V>I&N]NZ#EWDJL)4PF[^FZ"\':S*%+ZO_G +M0;0*4\,7B4VHA UO_X\<3HZ_)J@-_B>E6\B*U0H6+ 6F)Z[?P^CR')J)W2&0 +MQ2".L$HW$)U6.PK!/]WH/1#4C?ICM6..<]"K*A0M :I<_01/2\T:152:D>O- +M4P.%["F,K"AI&+,AJG=>_O'3'L:"Z3T ]@>T.!R15"N1:[6G81R]I54F5T8W +M,U81S#?QH3^WQRV.A-S-7RG*&IB'K+5W1<.@S&- -;;)$N[U^(P6JW$*YT:_ +M/P:0>:H.!H(+FC!-EB :>:^!,GB'OA06 .^JBJ0W.;B))B57L"#0=)7:I=RH +M[B#U/J"- =>97F?ID!^=C<"4_!>H?I$$>$&=7YI;BI1*=6'-]=LNX^2/PF#\ +MO8E+U612LUH -R^>IMGKXT'4^&EKU]?<;)K4SW(#(BR&,!1YL=3JD@&5MG"@ +M5F=MLT/J=LK @TNLK'=TZF1)5WY4;\ZQXK^5]X=:L\?@I^:@L/>R>>VHI9-> +M2Q9RNJUR3"=:@#!20S@]JKEU;+Q-<F\]%E=> Q/?B>E"#U#_T_$2A5KI-_R1 +M&T;_LCZ>-V%V1L$CKR4=53TQ)BN#]88!T#$<X%0TVV\]2%HI+6>)NDS0WV23 +MTA8TZ!_VLS.[_]:D<JA%.*A'2F'RZ_U&A "X(;_PE?V\=PHK=MG(Q6%U=^E7 +M8M'$59K_#G7 AJ)A025X )Y@)#5AE\OD65V_GXU*T#:\4MQ8T8XO('-P3 @, +M':5#80%JHMPAI,IKY?419\^35.F1UQ7XYH*.XXU_D$1$B! 9H$AN+*_K]X9F +MS1P#@\L1+_"FXA55 ._(36L(55)UA]ED;%A5MFBL%,G^6_!%SWW+(P:A0EAA +M3PT_VU@E#V9C_KA*#J_X1%F&\S?'HBP&#S[3=11VY=\-'>JV;9^?#2,SE(@$ +M*D@G"2,D<YW<!Z=8++*BT&>/'7KB++1W6\[I=9(%1L'S0!#8XO"T'[$+U9E( +MF51=B^OT7I,_72UEULWT8B$)X8;P*8(7TKM=>2?R<:N5]NTL*!CC'H'EBV-_ +MG,R-D\]2*W="_PY/NH&^A(?H]\DVU[GMXW_)V8!7FTGVQM78RT>FA>&]'3K3 +M!T!=E4;D:AOA $OL=<^=2?E3AW6^:(IRKLIJ 2G(PXO"&-D/NY5JTS"'SFO- +M8QDGM#OBM/F7Q5D*3XLA.OV*'\OUA,[\%>LS8IW3+FHJ(1IHS2C%3.\$&F+? +M*!(?'(K7G\ME*DE\$0I]DN^.>RS''# GMM[_13,8OY_L)!&2JJNR[!*<O2$H +M9<"IW%/H6"/U]5Z9H'X8B[@<D6]&:AAYX&DVM*'@;UZ>/7;(_9*_W_64L+\1 +M\%IHHJNY+T6<P[8O+HZF:8! [U^>9ZX)9M3G<]+BQ2B.U(RZX&B!1]RDS>F1 +M B>F';(R"0:H=IS_GRPPK<0F"/H>"^WF/GG[&RT.3K;05\M,5LKCQ8GYI[Y^ +MYSA:T./3'Z.#B%%YZK'41XW5-QYYE(KLKJ;H1]-6?YK+<(G&:\T)V1YX/(X[ +M7WO$/?2H\8M67:QI8@;RYH&[6I&A).KM81]_^ZB.]-+9%+4])S7TSXJEO3]0 +M+T=-S)-[SZ7WCAIOMBO&&X+42%+1EY&>%_IQJT+P&HO'9JA+?-4BJ[6;?Q-( +MG!A8T%8V]A1;<H>$X,UF).X\+)P%.7/55&4D1$D#V+W$?#=X4$&[(6X_EO^K +MG4.TY,8)G#G+3=NIN7EYN0&$T(^2A^O1(,>'^8X% <K2&*X8@Q0V@K_^$['5 +M..N04AZC/(VEHDW^FYY=Q[<FFU-O@%U8JSA%FZ9DK/<^0=V:\4&S@ T_$D^) +MP-B^I2X22&KFL+R:B'\]_V\*S^HN3[&6=:SMO&V7)#.H#;0.IHZ7U@4IV'"0 +MJK.+HXZ6B^MOHWAV3ZWT/+AH@)N+H7)O]GY4B@ZPT,^UFO@U.T!GN1+=[_M2 +ME778\8-_)0O),M^U^6CVR1*[F3*@06YCN@A;OG?)'&@+#IK!*+FWM>^+]=6M +MO74WJ S+;7@%EB/A)D!.:;#]W$"VQ6E0#2:R4_2K=P%VK>/=P2 ?O/R?.#>Q +MFNB'1J%%.X[SR[K0O-"0,1M 0(#A<J5)-IN[V \85#S VWWBZB/7<.$8"KF +M_$\?,-'I,G.)R7$Q_J36TAY<$DVC\A(J,+PP8 T:[7M\X20I<G9*5L>K^'H? +MAM:O\WZT+^:VK<V0/\$0$N;/U=_ #).\^@QK+F4/*\0[NFE1E@!1%_L\)97Z +M%+<]4-/-IX)$+3A"JC:_P9Z>6OBP.F!0SYBB90"5?+L!=RD%VI#G-6TD3'>S +MP)H+FH=S9]H1=C8Z\D*FESDZ?;-[[/@T&1:R%+[S/R]$1Q\NR(<.>5]_7P93 +M^<R38>9A/CYU#"7&O&I (<A]KDXE(@_OAI9: '7BZ[)Y7@6<%W=/"CC\\/2H +M0/\.8:ZU)PR),*$)ND![20$OX'0T4#W/.$.]:R@H==3Y@L\.E4ETGW)88!(> +M+4EYX(+8=>7#S",A?FZJ%>^[,2TW!3F374>N3N7I2ASKV/O<:-3.)=-W(A,, +M+3$ARAP<!\Y7'!E(T@I)_""9#'</-(Q5>P(]@OBK2L">CY@''P-)D!(8R5OC +M=6K+8YD&F\>B 1/PPKP9N^(:!?FXXK5H0!;?+*SO!Z]=IY7MA*6+:3DM%US: +M/H#"XE>FXG(/#OV]#;^<OTXBL(&:/XGBU]^UZB'MVBB*Z$N];#LS G#D/D@> +M")"=FX=U[J\^7"Z)G?5D"[1/[;> (RELY[R,M)/ J<$N^6KQ)]8*IYM<$V;> +MT9;_4&.1&431KJ:SSMKH"A"+]WAA:[W][T)HML'=)BBEC=,=)M$OB),@$@?9 +M:@1C_T?K)+$(V_YWOD[K@;&BX:XN753^_5-/9,WPL.2D(IIP,S3OK\19R;PD +M0_F^>O?G*:>?=*R;'@N0O 8I ! #8 GP$] @X#% 1.!;T'7PDV"T$- +M@0_T$IP !8 +0!# %H < "' )T M #* .$ ]P$. 20 0: $1X!32 +M"F,*2@J, /$"X!?F"V811!"G T(>QQY&$9L,$24-)>T<V Y[#)X-&!XI$ZD) +M9B.3#)P;'2)S!2T3W"2)).D)@QHP).40I0Q:%9@E3!+U%:\;\2&Z&I (#@ S +M"A\1, M_!$L49P*;'#8/AB2#&98/H N_ BP%JP.((FP=UP=L$K,-5Q&?%^@$ +M#0NU &$!DQO\#_T48 RN% XA(!B3(K$/?"06"7L #B8P",TB\AFV$0X$SA=D +M%VH3>@D<##TES!'%%?T1V"/;"]PC[1P!#"\F9!8&#M02"1D5%V8E&P(+%%,( +M:!QZ&M\F51%9%R4#'AQ$#[,8HR#. )T)U!?_(<8=1"5O)M(4(!J_'T8"JP#T +M'T8$K ZN)3P!Q &1%V@=&@75 O$F8P1F"Q,6:AX]#7,#<0B\!LT0B12?#E<+ +M?!2N'MHF?!U0(3P/<0G?#=H*F L?"^@<_ [7&G,@"A$"'!(?_A':&2@5AR%E +M%"$5<A[N FP4>Q6G#R$8U"-V%0H&-QO'$#\)$" $&:D7L $B)OH NR,0(A(2 +M+P'B'Z\/Y@!,"T,EDQPQ&W,6K@S9'7D<2B"A"E0A! :0!&,?X1+P(;L#VQ9> +M(V\,%@F$&4@%%PBP'(D%N LG)K(%M 3.&5$CD@)W#&X#QB8$#Y0>>A4;$5T( +MK@JH#:$A>P#*$W !&1=\ !$BCQ*\#/@F< %G#[\0JB @$[ C,AG.(*H/'@KS +M!1,*YA7%(3 = 0T!&U@!\0MN"T86LQQC$?0C1QAX#OP2@PLO#6@14"-M"7\+ +M+Q#7"KX2 0=,)FXA"P%K!Q$*%16 !^@8FA8J(]P2=2$F'?0*E0$A#2 !$PH9 +M")T0"0K2'P028B'-$/L;\@Y<&;$!5!D_"$D*<!BA'U8>H!7B)6,0V V*'U0' +M? _F"ZP-@1D0)E0(?B+B(]47O"!X UD$2 2< FP2^P"8!$0=0Q*)#S$// HG +M$3$.;!$,"K 0]0;A&D,5*QRS#'87922T"\T#EA^3'"@5501*&P4?AQ7P'BH; +MQ"2T"R\%4B.))> 7" "D(LT"*P&R(/T361L)"4 !'09I&CD:6"<%&Q(F>@FK +M $<3/12S$2PC& ^Z(+4%]P.L%L 4V1LY$(P+G0C;"?X:? "Z"'T4?!H/#ODE +MEQ$7&+<8PQ\=%]H*>B,K)@L%(@ R#]@1(1\*!987T27R <$: Q;4!JL6>P@\ +M"Z4.\ CY(F<3.!5= S\+:B/I")(@:1?G""@+Y1GQ$W$*T1QR$O 8:P7%!KTF +MG U( 'L1B2(K),X+=@CV)N(.;""Y!B(/JQPT#5L2RA5)",( 0'['R$4]!Z; +M(L\@#B)J!>LDN1-,# \5U G8"TD L #5"B\FTP%5&I<3[@B?(8 FMA6E!MP, +M'!;Y"LX&VAO] J8@1 HQ%($0%P./"R47. >C'E81+AT!%Y(+5@:&%(T:8"'X +M(L4"TP@-!*$1"03$&)<D?@ZA"M((Q24M(:@"!P%&$R8)S@#P"P$7Y!QC%D 6 +M*1*6 9 >] F!"M ;RR:A'W@3" TS&,L O M4#BP"S@HI CD1C23_'D<:3A"% +M'+81V@W3)NP<E@MM''43M ..!)(:]B4'%M81ZP@2)?8'Z"5^)CH:LB8\ VXA +M0P'?#O,>)0FC$OX8QAD=!MLA?R6U'>H7L"$T#IL:,27M(A<<% ]0 H,-TB/L +M!_P)T ^^$H8BF@KN%2TDZ1&-'O,>@Q] )/H#?0F3": "4P*($F@EU00M&2 6 +M4"26"/,@727) \,#'0ZO(AHF.PPN&!\:Z!RL%JP&^Q&3)#H5X"&O!] +Q!UE +M#KP6R")(("DB<Q!:(H<$VPZM&<L )B,<!IDE PI@$-0*Q091(2,<^Q%0 :8- +M,R2C'P42X!C]$P A!*($YH(R0QR'PLB!Q8=&^ 'G29C$"<=C@!J!OD8R!D^ +M%PPE5P;/(C<F5PK."J8BN02:%YH%.0DH O8(UB9])HX!0 ^-"N<.EP2H'R,8 +M.@?P$7X>(!Y_#]<$[AR6$*L")PEE'3@.2027$"4"9A-W#B8"V081#'(#]P1N +M&2T,82:1$M4 $PN##/($,@B/#F,E/B;Y!/H8#!/X!UX3T1\\$J$5T!",!^\; +M[ O2'H@.\Q0R'&$<M"8O&JH7Y2""%0T"TP\G'E8(8 9J%6@0PQB>!241!!1> +M&B@%G@, (B 9A L@)#0%>P1/)5,(XA-\!/87VQ6+(K,)RP$3'_L2/@// *4: +MU >U X8G"P6- $X9AAX( *L$?P $%0 +( P9'38E;1*? C0<^ M.)48"U@GG +M&:@9(A:/((X:!!^M P 1'1\, T E_QI0$1,>!B%& 4P K2 Q(3( !!FB#:4, +M*!.& I0%]!JG&&(92Q_R'OD@:B3?(\D($1.=#3P:YQEO&AL0-P2X'T40(@YL +M&R0(C0,E!(( A1!)&>\'$P/>%80AM0$L"08-OA.9%.X6VB'?&:T ,160%9@? +M@ UQ%R\4[!=+%@ 7(B1'":X&.R)[!+PF:Q+P"@TBEABM(&P;Z QY&% (^1B3 +M""XD.@[U)"(.&"0(&(X-YQNI% 8>+ LA'-XE' D#"UP"@17^!/<(=1VD$OTD +MX1N6" X/#@$#%0\%Q0QH%L@-%P[##:<7Q28/!"P0-0Z:)@D*R1C[!B<7^"5B +M :,BT!*' (L3\B35&-(9[P?@ " 99PJ /T, "#V!Q$.%1T%&0<-PPQZ#.4- +M5Q^3'1( #1CH#@,F? R> Y,8R!^B(^@0'P5/#H$6>AK@"FL/C0:1 )L*Z1E! +M&+X>MPG>#^L* !.G!)( 31D_!U45,Q\J"HL!+1,>"0P:/":# .L8K"9J%TT1 +M@2-[&),A;B22'XLFS!D%&O8.]1>H">$"LQIR!N$,<R*J'',7P!S\%CT1E06_ +M)FD8WA)'$H$,]A:[%&T4GQH#)H(!J!$Z ","A1__)"\6) G1%' 3XQ_Y!\(B +M#!96':$,+ JL"$8<3P[!&/<4+14M(!\/P0[U%CDEI1,#$ID6X!$*)(@7#!]% +M"@ ,P!_#%LH)YR"W#X<"41GT%L<&*1%,(/($M2*P#H /_1:> $H6>Q3L :4& +M!0*, IP6,P=7#O$ >B*W&64EU ,]!3<&^ Y'&G<+Q1V@(PLB[Q'2#4X2R N: +M#_4;[!7Y%UL+D05V"_L*50G.!"X*Y@-2(?H-L@3%'$@"JPJ\#OP6E@\Q$.@A +M#A7:&B0*E!M'% \:G SY%KX'>P@] ?05=1;[&[\/:P-)(E\=[0)I"VD(QP!] +M&F8@WP=E" (CR![['J8BY0,[#88? B**%B<@8PC" 8L?F@;B'Y$@I1K=!N\/ +ME@II$)0-TB:5%5T061P+!Z0B=!%:! H#MA/(%*H +1'3!L\=& ^Y(X,F\Q;U +M'HL/8 ]D%]D .@) (QP"F ]/)+4AN1[<%@$#"@'A!V $M!/M'K8=I2/G)>X* +M@1&%!PP8QQ#K# (@I1:U#+XF PY!"" +,!8J $TC>AB) ]4+WQ&\%!H&=A ? +M#'\%=A1_!O<CRQ1! L(*OB#N)J@)\PK_"<T-3 IM#H$*H@<' (H#GB.>(4T1 +M9B'<&, F*B'M)4P#Y1;6'8<E"R"J!H$*S2.%(#T&O292 -4>S0LE!8,(Y!CP +M((D3:12E",L9\R9I"Z8D%P.?&?4%L!\N(? 7LQZR"!P7V!1A H0-O1<S&]8= +MDQ+Z$?H+/B22&B8$V R(.<7X14*(VT9W@A;!B@%$P[##^<:?Q! $V\#]PR0 +M%:42U@K '64"% /W#6P7X!LT!"$4V@6I%<< ?QU.&=4=A!3A!' 2-@;-"9T3 +M]"*P#^0=QB:V!UP:\@VZ%8 /"1,8!O0FA048#38'U1R3!DX>CA2;)4$$7@[V +M!V$-#B$2&0 _@HZ);492A-@ 8T*$!T\)#L@* #'(78 H1C8&:T5J0>F"_L4 +MCP(O$UX!.P82(ID<$B&N#L8>/ S.!P(<9 I(%7TEDB(B#CL8A1=\#AH!(!!N +M%J0-DQP&$S B-ABS#T$CP!\1$0D1;PP7#>(&DQ>.!XD<SQAR"&@9HA;6#-\/ +M0@)M#W\5B!LR%$ ?90G[&%$;GQU !+P3(@FI'* .A!;!)<@EIQO0 ;L=O"$1 +M%^(?PQ;!#( >1"0Z$-<DCA(\'(0B( ]M D@DUQ<B&FD6RP5Z)J8;L F:"$ 4 +M7P;R&;PG!R;D([P:3122#=@9)26?!E(50@][",$9?1/I&H@B/17_#\8&R RX +M()\4PB;[&N07?P1B%'<A-1:0&?D3^AK@ <P!VP4Q"MD?8!FB'J8;:B:E)*\. +MT29J$&</ P)S)=D(90"@!2\ERB%P)%,C!1RU'_L7@1N<'YT6?1VV"7< AP%T +M&)X1_0?K(],%+!6'(XLBDB,B("@1=A\L'T4<,!&"%^P!*009&T0EE0$W(O<B +MLQ=:#^TE;0G,$F<13 T-#<L""R.V'.D?0P.V#-\!HQX%"ND2% 6Z)( &GB80 +M E //1W(%+0"7PL.'*,,_!ST)'\#ZB1V 9 !Y2;B!.D -!M_#((*0A./#-L0 +MC23D&LP4VQU4!)<D#!,Q([D%/ $R"%$FQ!^P ]\;SA8K&OH8S FL!/4?=0** +M#?H>30=5'8X"7 0,'_$?Z0;Q':(/UP;1"HP?10 ! 70#2PR=%ML62 ZH"6D@ +MI!+F Z(/ZQ_5"CP9IPSF&TP@3@+U#,L/.QZ8 >@<AB3O"<PB#AU=(<X;#0WG +M(:D751^9(W$7"1=^"]\/Q@P[(Q,BU!X[": 12!YA T(6D"37 ?L/E")?%E<C +M/ P;'6,/R0K5'NDA8A?*&6D8M *F%2@5OB0S%P,* @!J!Z(3F@N3)AD$/@(^ +M)" A"1Z9%!\E00VR)F4<: .8(8P3J"8+)7@BU2"-(-T>M X%(7X+X!Z%$2( +M' 8Y$2H%3A-Y(J<CB!TF T0-@B0Q)"X,SP.0 2(%V1%,%Q\0,@^C%O(AQP"G +M(*P)LQL4$XT9=PH@ A@*JP#!'.8+@1YZ Q$/_A!8!+TBE :6$;T9!0T=&1<% +MXA?)!+T$;1/^#5<$-0>F&A,<_Q@)&WH6QP4Z!"H'CP)' & B30P$$L <A@4> +M&LH7MB/>#T@-:!0= J4=30/I#FL%U L &WD/\Q0K"\X'Z!= #Y$A? HC%V$4 +MU0#4$:P*;Q4H')\BAPK"&JH@CQH4%A4DT@2A!W0&C1MF)14:G@??$$H=8".) +M"A4<#1_?( P%K!K0)/L4XR9F$3,6X P/%YL<D! 3 ]X#>2"D'O,>' PC(&<B +MJ1-P%I$.]Q!< T,@)PYJ#<0DKAMO!U0<1!%+ @(8SA.8 @< EP1?!X ;_0") +M%F@D/0G>'T 2'AW[#'T?2AQ$(T,+[ &M$)L";1)/ D0EQB'4'JP8DR#Y$VD) +M9P','*L::1ED)O\#)0.3(?@170 X)%<:_ ]-(&07V"8S#>\"M 3K 20#00QV +M)+X.G $3!$L%RAK%!#@A;Q_+!703)@LZ)8T6L@#L(/L5*"#)(B\.( !F&+ / +MI0,I"2T<7@0D Y\81 <U"049R0#J&V\$#1^,$+8B4P17"N$4XR/6$P(A7P>[ +M)>4B]PN+!D<!/0'\$?\ENA) &K@': 3K)F@<Y@"P 3T,<171"R %EP(A(4(D +M+"->$E,2<@E<#_ %GAOY "8)10@A 6<6 B#<',8&4002)G(![ &J%5 DV!;' +M&)4-?P-_) (!,P]O !(<M@="!PT!8!^5#>XFP0[_(PX=30XR(1,@LA!Q#*H" +M:0 F%SL-,!GN!@<0SQAR!]@C!17G$JD671,L$-@5;!B$$TL+F0?%'^ )$PX= +M%O 8,P0;"4 4"A/Z$#TBG0VQ(1L4@P4@)=XF2QD@ 5X;M"$[&1T3(!"@ [D6 +M[1+4%W84C"%+ XD(:!XO"SD0IB;7":09R@$K![<.H21T$;<0?1"Q&^@!*0^I +M(5<!PPZ]"X07(A=$#^\5EP*O)"LD#AK4$W8?X087%RHBFPZA)((-MPYN!BP8 +M&0%#%;8.ER*((+D:Z 7X#6,EL!OV'90B=0P-!@84!Q%.&JH<ZB1+ C($WB&P +M"NH8<!WG!#LB>A$^!;0(YAZU()4.70NH$E,!PPWH!BP=GQEM#\T?) %!$: & +M?B/B 7,>[P38(Q8#Y0<L)104\!5(%XD03A.##9(?(@A;!Y\<^R+N&BD15@WG +M"!PBM0C0&>,"'P"D%MT2^![B"%$&O [*(54,/PW3"/P;(1Q,$/8/XP-Z'A$E +M;!X #T7=R*F'A0C)!H[#2H'R -Y#Q09OA7C!^0EJ0;A"U\"0!*&$-T'UQ;T +M"MHBMPLL"#@'SB(]#!8"' Q[)*T5M W2$SX,=ATP F$5DB;N)D<6' =A $# +MT!-S"^ C]@.[$2<+ 0.J!%@5DQ4+!1H70@>U(TPA+!=)(V$0[1#- D<0BPVU +M(UL#F J%%1X#P1<Y"SP752#@!4$!"2-7!-D-(26Y%BL<$AB,$C@EZQ0Z(@H+ +M[R30'^ -U CM"[@ 4Q.#$!(( 0RW('X8(@5R!EH?P!5* ^@<G0.Z#"<CAQ@? +M!F8<*A.$%2X(HB8H ($#N!M[#!<)\0!$"$D7!Q;0'V8862$&$M, *26[ O04 +M+A%C&!L#/!L] 7T5'2%,%IP?:!7X)MT/[Q]5)K45.B2>)4T1IPSS)G,+[0.H +M"+,&&R,;$38,A@Y8%B,3/PY&#$<@LP\ #J<7Q1>Q',L+2Q4/ 50+ 1!5(#,* +M"!"T$ZT5RP_W)ID,5!W" N(1T0=]%6,!9"!H AT#JP^I$U$=YB,V%$8'IB(Z +M(5@)TQ>9!98@_Q[8$W 75@<X" T#4 A0(X@@D!:(!/0*N F-!\T"(Q22"!(* +MX1DY&WL4^!W"!6T%&! 7 X,1QP\E#$0/)PWL#P0+^@CG'E,0/PZ"'K<7^P($ +M#^L.Y0&;&K4=D@-?&/T) B7M%T4'6PF<!(P>XR$.&(8)5P2U)9(AG!OD%FX6 +M_":?#=,F'!IU!O<,HAO8".T<GQ3T(S\0= /M!R,2WAM0&A<*R2$1(ML:*0A; +M'VD'NB*9"^H/%A* 'B\DC!ML'X #2!Q7"6\#G1:*(:\BBP:Z&_ 3Q02I%O81 +M@R'.%GTC00/F'X,8>0- #\\,E1E"".\ERA60!0T=( V"%H<"\PZH&1 <\QD* +M!IT-7R/V'K@7 "&F$4D2$Q8?%I@9_P*##&0'B2&3 :09NAM)"]P98!C*%'($ +MBR;9 2P#(!X$'WP:81IZ$?@9=@MQ%5P/[1; :\>9@-)"Y@$"!XD)*XG P@5 +M"%<21@!Q'(0-.")>$ T',1H-&B$6-P,;$N0BFR.J!'$"+0W?$&T/O@ID%P@' +MUAG#!,@8F0H[%+H1J@(F"M@6S"8R!#0-&QC"(=X=S@Z!'30$Y!>F)405M@KS +M(,P/;!7. &D+TB53 (H&=AYL)ELF70XB D89U@4M'CT"$@F\#3L#M@U@$M<= +M$B:))?('!!/K"Y02!0Y$$L<: QU&$'\B3A_;!F0(D <2"E(.32.((%P>="4* +M)L ;)QC3(QP!7@V8!\ # !9S$5,+4B!@ \<'2A%C(BL=R@YD&4P2D!G, BX) +M42,I"9X4'A2+&=@)5A!8)387-0Q"#Q4-F@ 3&,4;?!CA .,5RB8Q$&@"&AH^ +M"L %.A"-" 6F1<+$B@*PPL#)10DZB5B!BT#N@SO#FLE)A)7)CX3*PG&&<4@ +MK1$L#&( 7 QA)+\#9B/0&\0 6A/O$+04X!,X&X4&CP7P&XLBO1L]&J()T (^ +M&",5\@#A!FP+AP4B)JT%VPH6#N8)M2("#6DEQ0\S =48UR"^%4\5IAIB$1P! +M#P^N V,?GQI! Y(): A5'',D>!93)>T(N0V0#R$FHQ<6%5\8R@#>'_$E2P8' +M'+,$9A-R">@;4A;U(Q4DQ08&)P@=2!R+&>L#/QB\#KD!B@=5 "41P0NF%/X> +MU"-=&:((E1CL(3X(TP>@"XP@N@7.&<</% 0> 7T"C0]J(> B82;H%ED+U!II +M%O &(@AU"0\9,QYL 0D5(!3Y $,B+ B:&043^@IG$5$8<@\K)8\/Z!VD#]L) +M;Q".("L* 25N$+(0+188!U\BVB$$!P !\AH'"HD7$QA^)1X<1P/<%!P5V2-) +M&J,*@!PL(= 0TPB''X<3#@-_%/ 9FP#A&HP;8P45!0$<K@0@&PP81B1\ ! 8 +M(!D>&[00"2(0%EL772:V%+$0#@Y#$WP6O1(($G<69A]J)1@%=1"J'0D!AP+B +M#VD1]A"O'9H"$0'8&ATF/QJ2#)H<V1WN&I8'?R4U&DD?&A< )<4*3!VW'5PB +M3!@Z#WT < 2Y%7,*4PF>%TL)TP3.$!D/U@M\ D84>" 2!#@D 00) EH=$0@1 +M&U8-,P'I I(=31@7#*H*L254!A( \@D3#1D#"Q2:#!$8Q0 8!3 @^03!"U4F +MLR.)#L</ 0R,!0,4U![V$:\0!P8]'#44^2/$$,TBQ@]O)MX9?PA4&C\*!A4S +M"=X3& =-!OD,+Q8,)KX&]Q._"YL80@GH&S,,]@>2!UP7)",1"7P@=PR9!+H+ +M'A,4'/$4J!<!#!\.P WV'I@&"@*H)=(FK02)$(P#?2,T)CP-!P)L&;4#K2'V +M <X-PQG^!<DF=1T/'306O0[K(TX$>!E')O,5GR-8#WTDD078"\$;.0J%%GL) +M&AJ:"3 %Z G;)?<=*!Y;(.\+V0+O'N <ZA(T"LD4[0HY%S$*Y!0A$F\BS@_N +M"-4BO"&^ @L;( K,$+$@)@[4(. 9(1VP&$\-E20&((HA9P ](]<=$@_L(G<F +MIA !'_LFD25E#3\1:0@L"3(FDA@B&%8ABP)'$!<(E"#&)1\@C"/[!CP,ZAT) +M)+4 YQ[,)5, 4Q*+$-$5( [C$O(&[ EF!U4-^A@='ID #B"("B075Q1 %;H! +M@Q:(#)8'50FM'X 6TAA $J,;+!6F'5DDI1ZD#<L*NQ9E LD(!0I?'3 3B!,G +M(G,0<R;*#[X%/0L3!E8 #"&&%#H@P!A8$A D/02:'$ 2\0-W! T2^B%_&G07 +M7!Q_'1DF'B:* L4/F@,?!7@)71X;'MX$N R$'V<AI!W=!RLB_!89""@ O0D, +M&'\ VA@)%3P 0#""J8E/Q%9#A,-1R3$$OXACR;X!<X(&0W7"0P#21.8#^D7 +M?AHA#T@<I2-K)M8B7!Y!).P?T0B?%O .DR2))MPCXQF((.DB?1H@%]0/MB2> +M$QT6> -%CL(N1#N%?X89@&R!,4=)0EZ%@H29@K\! D1! P1!C,'R1G/$T,= +MTP1*$X4 %PD=%G<<+PG'%D<!)02J!VL!JQ7_!#D.7 (L)B44B!W '0<BYQ5U +M HP7?26[#FL9_ ;@$,H)W +V&D,EP0R%)&TFHAX9(HD,(A 4#10+DQQ" #\. +M5Q!F!IL4:R<!&04B+ ,^&,P4Z0O0$Z@=@!WE!N@*D!B_$?< \R",#A(CH".$ +M$$,&4B5W(U@4!!?$(YT7XA'M <X"Z1QV&8 ;XQC+!R$#I 0K 24!NQH7 $$. +MQ!#_ N\E@R('%8 BS!Y$(5T0FA[1)&4<4@A #&40JQ=B$L0$*A*X'#\%T *5 +M)4(042-R I )(A2P!T\0^R#"('D+1!3Z%&0=G@KM(8(?<18J#XDEW0D^ B$# +M91JH(@(.]@AT$^$)J I$ ^P*C09F&\D?I1*, Z$B1R0X!A@B518@($(EC15N +M$@4FAR,M$_@'!Q#Y(<4".B;O&60#0"&0 T8C1QZP%Q,!?0K+']D@S@/C%JD8 +MR@2^$X\4Q!L0 : 2V1<X!1$=?07; T<'B!;V%G$,R H,%( %M ]!$, :H@E4 +M'K,D* 2A"(4-(Q]R(+PFHP&W%< ?0Q;<!,TE@AZG%U$C8165 \H$I %T$T ) +M*"6^(^8$?R+O%&H$S G&(:$FPB )(A0=XP_.)=LFL 7_(#H/KQ=+)CH9M2!( +M$(8>Z@B*)!,8EQ#^"NH,QPW@'5L83PA<$-H(R@>W G,1;A8Z#54.(Q$Y(6(* +M^ADS'VH;11;7&@XAK!>I"ZD"" \.%&LCUQW0":\*YB5Z(@DF2!@\ R0@- (! +M HHA& P?(H$+X02*!/,>S!^R%@ <20]1)=\)*0+T)?PE!0L$&UP+JP7K&.,< +MEAU''^X%U 7>"#LF<26F'=HFCR&M&T\)+A+^))P&S287#P029";5 ZX#80K= +M%4< #P(0#C 6]@%? %<1]<$E ?4AV %J8,00=; /$%8!'J#"8?K0,M"6T< +MSA%K'<\B\A%F"9,"L!;K(#(-(2* $545CPOU 6P/K""5$(<@J!9<%Z<'HQT^ +M(1@)&"61!7,@$PH"#RD#)!8T!BP5]@#]"$0<P1B'(HXE$@P$&CH#6Q,Y =8& +M( ]*#<X6Y0!$"-0F;@;1&D4ERPQ] 7$D4QL/&N('SQ#?!\H9S!_-"8@)*1T3 +M <$ R@_ >H4VB) '&$3E"'@%PP5I1,;%] 1'QBS%NX%]!W6#4@8WAA% :P' +M4!/S&"H)=17(!UDB9"5D'C8/*25["D0>4!/"'O05L10D$ (CX@$-'_T-_2 I +M&% +2QX #78?RAV0)G,@# ?"%^X-C"/N(,0%)"##)&$.D!KI)E41% >O(7$7 +MTQ^J$ 04H0\5))\CB27H'#@'J0H)#F,91 AY"2D65B'T%0D;D Q+![HDY1*: +M%0X9C1H'(4HB1R U _X !!T;!E<12A4W"HP-E@#8(@DCNB/ )4<)+ #)%+<7 +M!A6O#>P'$P"4$YH6EPU7"EX1(Q<J'$D#-@$P%* 3"B&K#Q\9K0<2'[D7W03D +M(K0D\0U>&\,2D!8\#DL(/P&6&P49_B:N%#<$6QNA%4@DW )]"]<2 @BE(8@9 +MT" =&U<6G24; '<1&R(/";\DV11]&$L9N06^'K@ $1_%!E<0ZR.@';$*Y!*1 +M!%D,Z"7?".TD22:F&Q(.# WA((<.=B%( [@9)0<")(0)11]J)9<23P-4'AX+ +M#@+(&R438AV, TT!12&6%QL>I@"&#_P@@ HB#2$-G@AD#R($CQXI"[42GA\4 +M"ZX.>AA6&_8(WAS7&_0 W '-$24::0T_'?4-S1!3$60'OP!@$OT3:0>C!L(6 +MK J" > 5D2!S)+\4DQ1H%=4!8A_K!XLD-A3:&44,/@CV'547S!ZP$M$EWB;2 +M!L8 MPP.(H<%8@:@&ET411HM!9$9'0NM&),1S0F)(+\,IA)H)+T+=@DO%6@< +M#PGP'R\<OA!'!JX.EPZ&(B$>1@NI!! >5@K#&FX8NR.'%Y\5S!5]&*$&DB4" +M <T/EA%*(AX* @]F)A0;&P"6&-<> @TS!3 ?P!=4&NP2_ @[#0(.> 2U ',6 +M$"! #.P!=B,S(C83MA0B$^060AJ:&_0E/0PI#N$/H!-D'.,:H 4")88D_R9F +M)M$-[R'_"4@:[11B''T,CPU&(64)O@8S#MP+*B,[%U >FQ:]'3L;T0(@(T @ +MSQU6$=L(+@W2!BD;VA:^!\P%RP:D%9<".@,7"A(,"!,G$J,<F 8)).X=<Q#K +M#Q@F2AK8(5 /G!O5%F0E8P,6'2XEP0#;'(L(EPD'(=T4D!_"%7D8LAO! CL+ +M:"!1'!(F/0] $](*N@8$(UX!BPV0#/$(X!7@![04_A3#'3\/+R+7!6,3 R:W +M )\&[PG&%)X?_0;7 HD2VQ8$%R(?E1\J#R0#N0!;%)$"2B"Q!3,, 15!"F " +M] ZF$\D-:!7A"VT0Y PE!C 0E"9W&H05J!I\ VL+G@5_$Z()M0Y\"(,6UA>9 +M&&,E$Q%9(8H$^Q@M(>( *!)@%@HF0P!8#6$7>B%=%!<?(217&I,*712=!,0* +M)@7G FD77"#V :P)AR..$LT"%@2>(^(@:R5*&A,$%QJ4!I *>@R]'T@:<AVB +M"Z$1/B3T ;(=7P)G(VP4.A[K"FH/:!,\'J\(KR%\%+(&$"#%$*\<[AC;'=X@ +MSA_@"!4"&Q.I';0%G!2; >(0_R.U'S\96@= #LP3;!03$0<:EP3B(*4-'PY! +M&F(;C2)5#>H.T1 R #P7;A\K(7\"4!'H$ H-3!W!&N$*B0Q0(2@8N0OC&SHD +M$ ==##H2^Q@L#RT$% ,V(3(9" >!&E$B)P&O&04<K!O!!-8:)R.,$7,4"!$G +M$; 5'@0H(.0"\@P_ 6<">A0:'0\'#P1R%S4 - 82(!8A/0OA#[L0?@1.";4, +MN@\@'8(:O QO#DP7?PAF!)L/]@N^%A $+AZ?)+(!H1%\%QH,41_7(C(1UARZ +M"-H*(R7+)GD* 0\##L<1001#&LP<1P,((G89QP<$$V09X@:N$N &R1-Y)?P! +M]")X$P81S0T="D<':B'3%Z<7KP50#R@7\1A+",@-8P[K)FH"$2'V$\\2:272 +M&] %> 5I"]DDR!\7 .@;\@4($\023AF6):(3@0RL#(4*;!*@'C03ZP6M(Q0! +M&0"0%=T/XA9R"*P+%B9: XX.?!6](0\@40JV#VH!,!D&! 0C\PA<#FL)9@=: +M :H+:@>A#6L9L #U&-06\PEV)<(8O0.W )8(81TU%TX%@@K+ 3,D[!:J%F$% +M.PRZ" \F\A@@!MH2E0SA \8A7R*^ '4810CB$-DB(PU< K,761&9">@+M0\I +M#? %YA9@>CIAY7!CDC.1ZX![@.HAZV%)D4B0SE(6<*WPE;'=T!.QDO'04) +MB .O#>\'AQ(I(L\C-AP$!\H8#1 O(C4)]PY )=D6-QCS)(X/)@XP#Y <10GS +M)>0#X0CF%J<(- ;4'-DEQ1YO']88KPBQ)HXEV@-T"G4.W M7"'\53!R^(P$= +M%0(#)2,+<QOC(VH!% Y)$V,'<P?\ EL4!!P'&W<>(!%A)HD4CA;9(U$.>1A* +M#_P$YP?7)<X.*!0\#=(B0Q_.$]\B-1JA# H.N1Q,$Q,2"Q!'!J,CFR/>!40+ +M6AM/%08-A2&T&W0D;0X#'!01'R;N'G8 :0N+'7(+A@^4([8:B13<#>,$711B +M&,T;7@[))0@F;Q*['2@ETAM>#]H0#@_E!*80P E^(08,! 5S&<(CRQTW'X$2 +MDQ,* H<8. S&$ID%S2*<$OT)6P6H((<#"":K(%4D! TV"MX,,Q1*#H(3A08" +M"C,CQB1?(ID)LQ!V"_83$!ZF(D0?G YO'74CB0*;'GX67PC5$^(57R.##4X! +MI@^:&O84; 3 !ZT!=PK% ^00.P5;$]0=] .L"/<B'"-C(F@8U@JQ'_,4X!%" +M&W,.+QO9!OT 8!P8!-X#>R(D"2 32 BE!88><0OA("<9@!NF 2L<?0:3(! ? +MH0:&&?,<QA0:)9TF] NA)=0%I0D>'4($4!G5&GH(U@(%$;(1.Q]T"TL6E@W^ +M'G4*6AO()&P7O00, -D#U!9Y(WH$^QIN"ZT83PHS"/$G"P &U\.T@VS)+D< +M A^!'5$5-1^L #D2T!BD QL4-"9' @(@L1G-"$TA(A+W%C\;S JF&<0520/Z +M'!,AUQCO%3H58 !O!&T=.P(\"E(<S@Y8&;(&01.N!X\?K!^P -L4$2:;!+@1 +M)P-H$X4ENA@,$#@ ]QMN!K@-:PY5 WP- ]")A8ESPPZ!$@*)A^-%@PD(Q*V +M&Z<2V #X&U #1"O 8$*@@L['S,9[20@&;,FH! S%0 1XA_J)"T<8B8+%98, +MJP3W&(@ A@CV!)$7OP)U">T".P0R#^,82Q?]#]L>;QA]$1(!^ @Z$&P # &, +M(&@:PQ2S![P(G1?3'68AJ03['(@0T@P''!4<RQ;6!UP$32 E $D16 (3%A$3 +M/R-G&8$8T 2O$O<$O"25!Y,2%B""!.0D&@CX&(4-M!LY(<\4VB),'%\"6R3X +M'( 5NR;N#V$;80(1(6T*P!=D(U '4 (=(&<0, ER#A,!#2*:))()2 =: .$= +M& E-!XL!J@@+#0D?+1A-(=D5XP@E HL:Q0<&%Q8B7P\P!WT3TQR#""<1417M +M ;4BO0TN%: ?] EM#MT2KA3K'=(#00,\$-X7M0>7&RD- R7W!!\?-2*R'KP, +M7P>5%E,DBB'&&9DAPPH5#*D:"0]@%BT#"",!"B0%?"$ #8H@MAD')40.&"&F +M%X4"/0.U(. ;ZR&M"H,9'2'S'=(#! !9"N(< 1JG)0X>?P82!94@5@YH%.@2 +M,B*4(S4CRQ7X"3LC(!TX(XL5-1^/!-,$F2#Y).,BB07V X,24A\+)7X TA]] +M%/,AN"'4#L\;WQ9P#V,41A+3(&,%ZQ[.#"H;* G"%GX ]010%Y\(" TS'S<; +M41XH!M(16!YX#'H)T!#(# AU@>)'@ /\!.''%4:,@!!'] 5OPP[#:P?8 R* +M(A$F!0#V#0<?RPH$"0,4"AX%%_\*@A-C(T0/?R#!&38+S \$!V4+216E(3@! +M=AX)"!009QGH%W,001T#%/8._1TY$%@/VQH-"Z89K!\&&NP,$B.W#]0#W",D +M'50)?@ON&,T/KA-5&!L*6";-! X+YB+[#JH0&PQG#V(*>@[W)2D$O0&* P\3 +MYA]K$V8,.Q>"(\X;=QOC%8X3=10[(:X*Q20N#C,+4Q/E)!8C#PE&$)0B;@ ? +M&L,)E1W6 A 7G0W!$DX5)QHA$/82%0>("(8#R T0'>87R!2+)3L(2B":$$T" +MWR/'$;4=11I9"DL8OA[C'NP*# '>'W\*=Q*I!) 5%16*!G\*$QG7!ZPAD15Z +M%Y0=)R)O!+@3S11R F$C!A'(!(4(,P L ^DDL2 ^ ,0%[0!Q#>47!AH<%X0* +M4 WM J 6RB*,#*T/2!"2 > /9 YT)#H10 G^$NX2W!7?(XT9$P6?%"P48POP +M"CL5AAU9"2,+B!US"J@:X A< 98+V!3""B :Z1&*"KPBIP^<#((9=PF<'O<@ +MA C"',TE/AW*'=D390^$%/D/0 @%(B@AM@!\!9<&:Q3X'C(&W0HU'/8 X2/& +M'BX Q0I8)3L;E@D.(PP!L0'*'LLB@ IF#/(?FQI<%D<4!!T7'T@D%1HH'L@ +M'"'7 @T+6AUA"8H<31XZ(MX ! ;P$'$ :R++%L4@8P[0&^0A\A9A![P@C1C' +M$GD3&QG5!U0;T LI$5$1712;' , ,"1I'J0;TPLC' DB6R80):<)L0H!$2XB +MZA=U#A,E0Q+S&.P8Z!5F(V8(TA^=$)(.&ACC!& C60&P(80F= &[$?83;0-- +M%T83Q1\,)2@CN2#"'"P ?@:(!)@DA1(N$?H#+AP7!]@1:Q9Q'68"AA=O)NLA +M9B8_'FH!%1G&'; #A0T8'XH,50Y-&48#B0Y)$$T2Q!H;)H$1 01C(&4"G1K? +M E(!8064#3L6(Q^5!)<0DP&)&%X!P1<K#T,%D RD ,T+SQ@; +P>*R.'!4\' +M8@;_(,(!O "B"<T.K0T:"L4 YQH(&Q$9&B-! ZD$EQZ'%!(5)"-:(MDFIP.U +M"GH#C266%)\'!1QJ$,,.M WW)$(910ND#*T2\AJ_#FH4K15G(*H!"",7"K(% +MWQJ>!A4*GR0E%',DAP/U(;<=BAR>"@44WPU8#R0*O15()C -W DI'Y\5M1=J +M ^D R1>,$R<4F1,+#3LF?A= ("\"%!,<$;PF.P5-"W<==!Q6 2<+S! Q)=T, +MR!%'&8 >D".4(+\9X0Q4%30?FP=+&AH;>AV" W,0LP+[#_T"M!WA$:L*&R#[ +M"!$4J22I<C!4,$!$.H@BF$2T1,AA"$/H QP/])JL4_Q=F(T,;L0T*%)8& +M 266!V %UB4%'U0-;A(&%08G " 8$5X-Y UR!4H,BA:_%J@:C@TF"Y@&OAMI +M%?06-1Y9!U8=3!KZ#ST9#A5G"L "QP/L(@00\B9^(C@$!PQ. N<#QP*L'RX5 +M+A?)'GD#^0QV!J07'Q5K&<<>\@G"#+X3#0@H!5X/MA_7!J$)F!M5'ST<&1(V +M&YP9/PV.(=0,?QT+%4T$- &C"CL%?AF%)K<7;":5$W(=^ 48 S82RQTR)7<% +MDB.E)N,%]1;*%DH77@V^%2\8; 0H"N,"70/]$7 &J1+F)8X!/PD3(,P-VP U +M%ZDF<Q N)3\?=0BO%O<@_B L$ZP?R2-Q"9 A,AC&&,DD#Q(?)OX$P1;B!V0C +MPR,5!3,5EB#M'+4CC"*U#M@C>A<2(@<A,Q46"1T)PP5.%101QA;N(205O"1. +M)D :@@<L&BX&CR7" (<<_A7Z&)<>E!NH#1$ N0YW%\()OR*L%$ .[AUL(70* +M?098%8LF+P$T)*<B'0P%''0<A@ C)6T3/QTF$NT- Q8]$FHA2@B0 \0?80AA +M MP6H"-J U@**0)!(4\5EA=/(,<+]!#X U4,[QL&(+(6GQIC)"H'K \6')X* +MPP8H!HL =P&""@L?_0TJ KT,T0+&(K47^R;I(MH?[B"W%_HF=Q+V%I$A9Q[Z +M'.D-@0Q'!>06>0YN%VD4;!5H"=,::R"/(X 3<Q\S%H +WQ:&%NP'C UK(%(& +M@R!Q)<X6;11))&HFV@F! Z -_B#U%#$=82:$)@T#2 :',0*/!S-!%H=L1N( +M%*DAJ L )><."P@,$]X*<0W*!4\'11!\#G0#@P5(%:\#_!9_(2,#X" Z),,, +M;!GJ U@8;A@R#TTD4"-+"2PCUA[ #2XBC0]$#(H@#@\]!#L)BAGB'7(%[P?2 +M%/\$NQ'U! ,BT0N:%,0']P[T)3HAX 4*&&,@SAWV D@A:B8V$E$)$@\S%<() +MB0XD"[,='1U%'60CZ0<P(7(;KR*P!IPDK@A(&*8$H@[8$; *G0Z#$%P#4 \E +M \TA\ "K#AH'%A""'^@1%@* !G0CO0>_'F 67!^5'=H2?!% &'H42!E9$#<6 +M60;R"I08IB'Z(L '8!_K#VX2E!#$!]41AQL<"],AZ!"X'^D<Z"&G U 23A$2 +M!1L&\!RH&$ 6Y!DD K<)C I?"180,!9M#U 6\1-S'E@5?QPC".L>; ?U(ZL+ +M9"(4$I(@= E;&E,!Y1^)'K4$IP/5!\X0M0D"%84++0*D$Z\1HQKT""4<[PN$ +M$LH<2Q^K%^P/<PV]! ,%NQ^F$!D.JB4F"XP+TP.P(KD@Q C=(DTB[0'W!C0= +M'"8#&X4C?B*_ %H,2!7!!8</G"*B$B -S0XR$DXC 13>($,AG"-Y))@>]Q?E +M'54BQPRX&V ,&PVT#,DE[22=!5XB\ XW(3D/R@ , A(D.1+! OD3,1G.&E,5 +MY18% L\;2 1J!#8B7!$['"0AW!1I!CPB8!^3%?0#CA]6(C$5)@Q;)D4)O @] +M). F"0Y+"X@#D1#)#P\:ZQK3%1 F'221$-@5)PW-%VH" 0R8#9X!6A V"L 7 +M!PRO".,4$14P&L8FO@CA'0H9_PC=)?@/2R8Y(9P.UQ>Q#^8(G AA$G$:5R%5 +M$9@1H"%C( <A.@QP"PTA@A=+)9T,]P6# Q CR ]5"$4@&!_<%&X#_2$4)OL +MQQ?T$<P-/!%?!=\C\P^\$AD1N29V&\ #QB8Z"6(8B"#)#;H.6Q/* "T5;!_Y +M&.@8!PZ]'Z4@JQQ9"'0-W 2_$CL"+P'_%DL6FQV &;TBYPB#!$ (^0?Q!&T" +M/B+ #,$*>0U@""H?)!&9!4T;Q"%?)1P-_ 1<%1@ [!U8$(4BU@2N B ;)P95 +M#-H@UA?W!7@ 3B.&!0DF>1">#>4"N 'C%1@)7PJ/ 9D%[@03(3D'51>L#9LD +M P.2$4 (B1DH'.4'XQ,9([<:L@OW(*0.[1M[![0@> 76$J8E02*%%@T(R".1 +M"0,AE2&,!*8>^B ](G8:Q0!%&T <;"*:!,4F&1/<$64&T@H$%+H&+"5A!9D9 +M*"2&!2 HPHO&[0C>Q(0( LBUQY%#7 :IQ@F!^\=?!6K$AP3NA9^'O,2+P/R +M)P,#!!T&'.4B;0E>(#L)N HK '8%#@#C)* FWP\<!#,4OQ[G$6T@( $2"U<D +M-@T?"KH.5PG'':<:/A$%(R,3"0C]!]D>4Q&A$TD/F 3!#AX;SA8E%0($\05C +M&[X>]04G!N@,HB(U"1\,*0:Z&O ",QTE$-DCC@1=(YXEPAH_!5D1W0W.#!(- +MJAZ:"W\A$B3#&64D(PHL WP!TA(R&9D/;0%Y"BH!' !C"G,DY0B/%9 5+PP^ +M&]LAS1," 1P78B1A#>4%!@9"!%P*)!2!&H\AUP8-'#(?;13X(:P 52!Q'] 9 +M_1,Q QP6) '7(I4=V!4T#0T2,AX@%JD-30YS ,\:I0P1#W<7'04J'"X!MAW! +M!@L1)P"W$V44-"+E$I !WR8% [8>@A8Q#?T00@_1#?0/+ 2['<L7TQ$Z'90> +MO #E#7P&CQET PXC:!/I#]@4O &H T\@_P2^$=,"^QO^(3H'>!*\"M</!P C +M%5\(%0W%#/D292!P"\<.,00#)0,/\0 /)+,=1Q2M!6D"PQ&_$;4 #PCJ%\ 9 +M.!ZC(D@(.!;R#E(/!A@B'5TC-04"%#D.DA/,"@($Z@$*$B D: BI!#8@:PQ+ +M%40(TA?>%>,2]!"L(+H%4!Y6#OH+$0N6 ?('%A3,(5</@!*N%Y84Y!4"(-<; +M7 ]>%OX9;1%\"=8#K@&#'L@!-@B2 Q4E- ^:&6(21 B2&W4%OQX.(_X3?0,G +M)N8+BP6 )>$DF0_+ K(@^0S8(/4%8!-X!0LB:"&))D AEQ\Q"T,A9R6 (:0? +MT1^=%/0=G1JI WPCR1RY%*,;,A*?$CDAO2$_()\EBPS,(WD0Y0PX'$ C-B9D +M&ZL(F U.$W ./A* $^P$[Q[O!5@ 4QSE'U,"<@2=(6HF"B3!%H8F/!K*&PT9 +MX28W%NP9^P^/(88)X".] +H?* $G$#X0#@['!(,'OQ !"F<.41.Y('8).1:2 +M(R4%L@F%#UH%LPRZ(M,6<2,S!#@B3@M0$PT-PAS('WLDJQ,'#5DCGA@%%<H+ +M+P%%$6T>5@XC&LH:P0/Y)P4=&@9C%FT7GA_9!JD<J04_$9P+? B!(&,.5 ^4 +M'#XF#20\!=0C9!;'!WL0XPS_%"0=TA8C %T&3QOJ 8 %>QT: H@!C0TT(#@% +MT""["+4C\P'A(\$@,0+!)3T=40O'(VX ?1'[(.D4"R*O"Q<0+!?P%C@&$PJ, +M%_@EZ" ^$D8#U0$()+D<5PW2'[0)% $8&VP0#Q2R)&,,4P^L(1P*; N/ A\? +M805M#@@6^0^"!S4$0P0(%8$DD!N4 IL98B<"%XP7JPFY&.@:<R&'$'D/BAF) +M"<PD#"9F"W4)FR#K!JHC(Q7^$ND47QCX&,86BA.&)!<87"-$%HX7X@QX%?4* +M=@C*#RD*!R.D)64&C D(!5@;- RB$&,F#!/')&$@:P)C$C$9! 4_'L\B=B % +M%G(>?!57!_$,'A>O".@9[00;":H2M CO'P$F5@VK'(T&91P9&OP52PRY"W<. +MF0R&(5DF@0MK IL$P@Q&)'@72",C'6<( 1UB(!\6Y@3&)1@(A \:(0 : B3G +M S,EC17&)&4'"@P["]8B.P_H#^P=KB';#V$&?!.N +L5V -((/\F[Q(;)!4= +MKB9X"ET+Z0ZF%D,!]0X4"9@ASB3S#J8*K1PV%OL4NA0W(A<)@A(Z(LX>- FS +M!&@@X"!4$S@4;@+< 0@2#A*($?\&Y1PR&)T4I!;7)$XF8QOP%%P?*QV_ 5HD +MUR2N&KX1\ ^3(S(7V1MI"04&A"(<'O 3,P"]$&0*(!E=&/T=+B#W ?0<*!/B +M'HD-4@0?#-T@#QM8#T@"<P'1%Q$92@HD">X#"@$L%O<!H!%@ -$8$A]_#JL< +M&!:/#;,)V"9N'O<!5QTK'U@/" =;%#86,"+#'B<2"Q5[&IH:1!O3&)(&S"%J +M%%<&R0+U(AP&)@;1!.0 :Q/# O<93PG+)8<8>QIK)0T'&@:4(*@8G!')'HX* +M)0<^![<0CAR2(" :,2 '$G<>(PLG&@0&RPU.&8< *P3: 2@>20?9%*L#-0 2 +M!40:,!1J ;4,E0>J$; '0@$<&\(", D< : 9HADC"GL3OP7-#;HEFP2_&#T% +MQ1F;$D\,N@ZC)EHF(@?"'%L ' F])HXC7 :X(<4'"!3/'5<"D@H]&UH?]2*B +M!$ 5CP#1!LP><0O&!)<44P^W&9H(WA1/ UH$3P27)BD#00ME&U\*4PK/("(/ +MZ1A*%[H$MQLE#[$9[!87'Z C7PGH(^(BBP53%&0,ZPF(%WDEE!>B!%L21 [/ +M ]$FM1S#(M\8< ^ B\4T1AE%CP5CPEN%,PA3A@N)/H/'QD>%<(A1@P$$;0A +M9 2)#TPE)P%D!=,'510_%[43'B2]#GL9 R*7%\T9%B7H(?<-I@M9!\0.#P.Q +M GL24PQO"] EO@-#&PT+PP]$!^$4GR @$ F"@.%!2@(=@3O)BT&5A7J%R03 +M+QWO%>H"#!H"%4$ LP+M$&L/I18C)'D (2!Y 08)-R67(5P>U2'7&X<B4A'& +M#EX-=P6 ')(@70Q_!RL6:1V$''XA_Q_ (V$@TQ ;&BP:7P7+).D!V1"4(LL8 +MUQ6Z![8+ZB#^(M4 ^QG6'MT$VR6C#&TAIQ2 %!0DAA06 $P9Z1]6$GH'?AG/ +M'Q0> 1^-!%P!#Q7'#R8!] FH&UD6ZAQ1!P4F,Q?#&QH89!>9%ET1\"90 5H= +M6B&'$.41!0C_'8$("1[! ML.,A-'&=0#X0%5#^<CX2:<$DX'A 'G"$H-WQ_= +M$*46K",O#Y\;D@MQ#N48>B0@#I0>* MT$NXC,16) 8(6ZAHU!*,+_1<[ _$& +MB109 ^ (@ #X!? '8P$]$$L"]2$6 HP;JR"2&5T0TR"3!<T@4B4.%1H? P"E +M&\DEK@MO&!470R64(^,1%1JW!>(96" E$P$:714K _P;7",,#*X<[ .G"QH' +M0"39"!,8SB10 >PD>!]D'2 3:@TJ&E@D2P4["\\E,!L: >L='""G)(4:]".E +M$(H0E1,6('<($2/E(O@!+Q=&'&H7R D)$:\>>PA]#+L@D!Z2"FT!;P0@$*X6 +M'"7;$R$/'1\H "D$5PK=&[$2 2', *0?""-'!A,5<PX!"[</#"#D'EP#R1^X +M$^X1-@1P!9T+P AE E<;HB:D%<LF#Q;+(KL3CA7"",,!@!G1!&T<;R+("R\+ +M^@?>(BP1;0I:!TH!(!M6%8P/.02.)D4A4R Z'I<.< -F&V\!A1V&!\\@0@?^ +M'5D*^R N!)44" !Z$D,<11_V)-H,J" <'7H@IB8")?(B3@NP((0C,27^&V G +M#18=!_$$J +Y#[4>L2,$&)P,!A(7#RTB?14D(5433R;% ?<2)@$H(:<'%@LH +M'3,7UB+U :(E1 FP"%$<]B:K$3\)= E&(?DA "#%&\,$Y03<%S<>1Q</!^4% +MPAW2'(4"S@QQ(B4*P0H=&\<:*PI""18.+"5/)L,(-!#9'50FT0-9!)L'/P)U +M!Q@3EQ'W"H\)/!0="7 =I"#^)H@F$P-4!Z88]B/[ F4/F KP $\:UA:W'HTB +M'2:Y$B\-9A9] ]HAK1SN(;4=Z2/8): &O05;"0T?R OI&QD23"8%!JX6I10Z +M#,4 O0@O#0<3=144$2$2T06]"/$/^PJ&'FX?^ Y3$V\:YB0P LXAV0&$ L@( +MTP=2"]<6#"6\(>LA*!/4):LE'0=@$]D&<Q'\$18?L EN&=0FR1AA%=P$: @W +M$!(;%@X2!Q\(GQ6:"Z0*8A8!&A(>8!/M(5('CQY !9 @'!_ $T,%2QZE&!HF +MBQFX&Q<:BQ0K'=T>NQ#Y 5@$ @HW"D$?U1.Z&IL<@R,;'-HA:1U]"V82C .V +M(.()51UB"-4 _R+N'E<7>P,T(O45C0'J%/T##2:M&"$-;Q)?!N$4 1UN')\2 +M'1*S$-D,&0R"!DH*S ZF$2H@#0>+!#44'P2;$<44GR%*$F<,\Q(B%TP;'!M' +M&P03S"27!(0EYAG0 IX PP3? 4@<% ^B%LH4NP*L(P(*RAZV$X\EUR;+'R08 +MP1"!%?,39"%5&&@<$1#8&'D6\AC$$YH9_"$*%O # @(J!18/VB X$082+!>( +M WH3"PJ1%= =<@/0%<,!: <<#507EABK)&,9H1!E$E(DSB88#I4<!"54"^(2 +M)Q3:&6D4 0BK&? @400V(GL(*P)O&L47Y25&(3@7,0@6(L8/VR%;(; ?K1'N +M!EP8?"3U&_TE$P_!$'P@Z@&,"G<'.R&T#T$$4A."".4:<1%4#;(48B*;'00; +MUA!A&;P%\AH""'<1M0I(("(!U!0W(-DC0"5<!T<1F"/>")4AT2%1!@H0J",V +M&J@ :A3M(!4C PT, GX&>";@$;T$(B)A)A\(K@MH!L<6^@%!!D(*AR(\"4\D +MC1D0&<8+1A"!#P )J0A<"_8?(A^)).4(0"+5"B0 JQ73 @P@'A?[#S<F)PF& +M"78'U16!$U,2;A2N"><?+ .W(Q@%?P6@#=8(5@SU$J( @"$"!YL%M U@%@$* +M%@*) @<@#Q?I%_LFIB;\!JXF*11I 1P>%PI (&LBZPX,&@ +>!*B ),*LP>4 +M(J,25B4N V,+_22[)(0)N@21(3P#51]R (,.V0O4&6H52 C4(LX7'P*>!+@$ +MP@#D%]H)]B6J&&T%$ALA)F\=Y0^-(T01]1)#$QXD+!HL(T$7.!&]%#(/, ?J +M!F\@Y!!W"EL%6A:M'?0EJ2!D$G$4;R" ,@_ @V!BT+]00*%5H#CB7U)GP: +M;P$]"PH3/B6C!78DR 1S&CD$2"2!&E$")!O4$3,)AR)F))43G24X)8T8)1(9 +M)8H*.29D#'L,ZB04!G($3Q9%"%,+?16%%;0'/03?"Z<4"2*%"C\F?1^W%I(F +M Q/R&KH?.P$M&J0(/AS-(5L.#QK %KT4P@O])AD4)R&8'C$7, .<#%@3;0\) +M$XX-KB5/%-T&001$ ;$&)!<Z%Y8-V13*"6LFH1W9(L08,":"!!,2RPSL'F,) +M\1\;&9X 2B,;%EH3H@M!$F\3W"0Z%7$%,@:6)/0152#^"!L2N!A+)=4"9!9S +M$8H/6Q9)#?\2IQ5)!I\9*R"8(3TC^1EG"Y4;+PJF!EP!* F/!9X'>A4*(*H0 +M-!-S)+@@WB14(*(=:R;>% 4BD0M[!S<?&@1D U,+?R:0%A<#'1'('F$>*R$< +M%.(#T0X\(Z <Q!+C(=TCQ27('HHASB-L'3H&:AFR'SX':B3> _<@>QO<!N0@ +M"A7V!;0B0 V! &\B61KX(<$$O!HC%<<*Y!Z' H8+V@Q?!@4.'@"B&V\,D2&B +M$CT!6B83$" <\P U!S0)EA6($1D5K2/M"ZP6J!P^&'XFGQ%7!#$*D27@$B8; +MPR0B$L8E?AFQ!1XD>R#B(4<7'0DV!$4G!1]$#2P7^!#A$C$7<!8]"9X/$ _Y +M"=H8 "!+#3 FPR1P%<X*M"#M"^<!_R1$&&86-AO?$W $EQ 8(\4A31OV$!<@ +MJ0<2$=8"FAAA#S@2?0YP)8H4]29\(C\%%1;O(5L"JA."!#X>A0-3%UL*6 Q" +M)PL1[P$'%'0B,1S$#Y\!S0H9&\0!,A0@"K4&VA&_)$@&B @*&$T2L0;% XT7 +MQ!PH'<$"H0OT(=4100BY()8E8QD\&ND*D@]9%"\#QQLV)KP9JQA&& $C\ /R +M")8C=PL%&XD:^2 K&3T362') XD!ER7O"1,*:@@K! $5#P39&E$D("12(0(D +M9P6V([X&1Q!*&8T>906[(.05 #"&?L<]P(!#?H+21JS$J@/]0(:']L,>B3[ +M"#DA.1S)$KD0>27V(KL.*@;K(A$ =!6D')X/3AKN'TP05!OB%'04MPHJ#>PC +M+Q8>$GD;.1&-$T$%WA;A(>\ 80]($:<@&!5Z$'8??P;2(9 EYB,Y!?L$QQ"7 +M S00>@2B#@,F]0;&!1$@4P?H)L 7MQ<4$,H#?P\^"CL']R%O"9X!3!_!"H@; +M]!.1%EX1#B),"EX*HQ,' /0#]R<#!O40* ! ! %8 _P'\ TX$] ;N +M"3T+X [7$B(5PAFV'?XBFP ! ! H 9 /H ! ( P $ +M ! 0 " 0 " 0 " 0 " 0 " 0 " 0 " &/ 0K0 +M , $ @ # 0 !0 & < " ) H "P , T #@ 0 !( !: $G +M$.$ !?40 -2E .AOP8;R "-C$%XM:\< !:$ S.T;SM/"$ "83XESEX@3^^! +MA:Q!6RUM!.Z?$+-+!Q5[R9?. ,!A +GUOZM<I/'#8RD '1 1TD$.-_WU*6 +M<WOQ 1_0;$KEG"5U@Y#C06O*=L0LQJ2" Y4, V5?4<4&KHA $D-<]3'B/W_ +M:B24#PQX!!00 )#9E&5"+-=B10&:(B873R< GQ\!OVKM9&XXE^W:I_GTZ3]/ +M P 8%Q A6R]UC[FJH3*>[)U3$XC'M8X ^$ ]C3/9C'-1OY5Z;R).DKJ'0^^ +MD.00 '&5I?%W=2EYZ&6TJP=D%;41F<RG%AO.P2=D8Z(8RN^D>R7-T>]P:]\^ +M'YWJ U]3$-',[B)AT_H(>>#&VB9GVWFK98X:QP@ @Z$ /6PP(V:&YVWD)K8X +M-<<L;#K-\<>^+AN. !00 &-18(_9N"%T+[ .4,D^0O3NEW9H"<1WY1%T .. +M@>$7LCOD>- :'$8(#WGU]*=BYXI18LW5BW?9CQ"H+D,(JK(:?(XASD#SBLX+ +MA,0+)WSKE,.M)1))80":M((ITUJER^T:N:]>&++91["WLIUC%#^, UW[ LH0 +M "8->2O_?&GOX.QH':752NMF2J00!S?T]#A&,@T ]P!M7D$E?NX]+NL2Z@\B +MX#.4_;8.P)OM>'Q94\ D9K@3H?4 $,L0F$$TB. *V\@C LI__069F\)W/.-X +MS([YW2=KO8YFB;8 B$ B@P7NXZD5J^?J09'LC9=2U_@@-RJ"O#^V4"HCH#0 +M:QIC(Q ><D-P.G?*;/&RDW,7E5<X2P\H&$Z2=O2>,5,!M:XNT>7AP\@/@$N +ME9D) ]\X_0\5Y"\C=/7LT\_<",0$L-J\S7\9IC,F ^D? DX'$*7&]JM.21MG +M+0)N/0816"GK=AC1_=-AB"+,W5\[E.Z,4+PJ<@!:X0"'<Y#[*3-S8B).-:X( +MXL)]OM.'_07Y]SM/H50_9P=%U]0F$7'"&@ -$ >A6%;;D\J:1A[XAP$4#0K +M+]TG[F-0<9FFR>D6CDHN*!<(;F\:21EN (MP?=8_,JV9$LH:7R7@-!8L,7( +M+6L7=[<<Y0333C$0-J^+TW/4:5SB4@%#$.1[N%W(TN94AS<(&(2>+QIXR5#[ +M;,?#E':86LQ)3B@IUOEETUR)53P,@Z$ #NO3K:=!3^3WE3XA71S[W#*_7QXI +MR]79KU?2V(2ZS+]DL*+]MQF%WLHQ >@0 -1!F!9[7-/%.( .UQ\[3_5K7HN> +MF#-R\%<1,$'!S/DP.CW*+5EN2] N?95: $HM@?O#T/12(BA0MP_R\U<3%!/< +M0EU]UCD9F?A9.!P DA36AK-WN7JE_F$2MV%J M_$'@A8:IP L&(P!90'GM" +M,WG5, 1K(-0)0!AXZZ5/K^=VLUV_'=^4O\8S0#][O(T 6$ G',2]%T'X9=X +MY[$OSEFY7JK:M#=9[%D"T.GA"\?D?8B$(7@NHFE(?1%#O()-?T/5$ !:_7,? +MY%0HH>'<3F*/F0=<_^F^@:X_Z]B;)-V07):O %PWF0DWYJN85#^8PDVSO",* +M63U!^-(BT#/GI_/VEE2%CZE^K[8<F@' %E(\X*S%+OX@/R/]HI^YZ@?W'B;Z +M-W\C"U%% 92[$)1X O=TP(P;70"P\,9UJ=NY%.+9<M]E#TM,=RC@%FWVD<)1 +M0\G/)Y6K5=;BYB><J+&F #TA *P+YQ>,<_" Y6"M,%5/&/BW*UC-28VK=U@K +ME?UMCGN1NN=?;3)62QNN6O9$=#F%GGQ':>L "1 <KD,L&]SG6X:LD8 >%UD +MA -_X\,A7..I*=GX1)'"X,?R2JY43>_67J<5VMH8(WV<J=-^IF^Y %= :R! +M?A^IX>$E9!*[?G:=H$;QN#R _J?/3.:BT %SK8SLUCABB</$Q07]'OB4H6[5 +M6DY)/>,X'/<0?4"U0OA.SSLA>ODE<6O >3OT;.)DJZ^;-\%*0;6-U&8! "A +M)TDQ+X'P.]_^SB1!)!Y_(L\Q"(_A +FR=3R"B!:3S3\Z:XFTA]X(GD5&:$VF +M#/W;DY'?).P3,&A$)YFT0>ZV@<K#6 )1\=EH):)]=G&- 4X0 -MUE!7R8^(: +M<&$3 1 J9..PF_^P2F%$JE0&=LR$Q,@\ H4ZTQ&F>%09'WT)[1#C?7L *4S7 +M'J;T"#, ,XS!E<Q1R#R<[Y!H-6N&Y:>V%.7RE!,[^33:C9(Z8+P"B=W2DFU9 +M4_%=3#-E5!1F_-*V.X0*+;P38:G)< ',Q"&.JM;FCKR/[K=,D;;V)!*6.A) +M1L4HC,8?,%N:%PAE@'PIA+$&OW6/IXQ5%^"4]1;T9H;DI[WV0K7F,"P :$ +M06JG*Y/%U'A]QNKCK2ML*_R$2_!UKA1U6'LT8K9ZVX,1#%4"F2\B]]ZP[ "B +M.\VD]<5/BEMEB[B-\]*!+FD0 %4Q":M8TJ8,)LM688.':ASTP76'Z'8L1$?/ +M0: %GLD(!CZ@NLCHY\_ 5>'Z1++O 7ZP)" E<]%R^8'DN 6N!Q7,@;2OC)E" +M37,&,OO6GOG1PT .R)-/0[@,L83U=>/)6_2,8I/_!B27&Z]2^8N;(8O?>#54 +MX;-ZUE\%>9+_QJ4M 11O$!,D-"+U1"1]?CV#IY3/&AZ"2T Q6?K,9:0_!WF$ +MK;MYLX#I:G%9:84BR6-96OU$GD-9:%-IT,8.Y9\X[%37-G0 *F$ OS)S"[@T +M>#PT8;ZSZ@9*E)6LC?&_:S<*_"#_GZ;S.L[4F]@#R"WLF]NIR=Y)^&G"SP@T +M=ESKDP6Q**7)%Q\@,G#O 80 )_M^MR S</;'V@X+J=Y6/6:(:SF65@3U:IF +M66B;,2A9[ZD5H'[&A3N=JI%DADTU:3BC8/>CL0%]0.\6F$0\I*=\V?N;'$%* +M)VX7KE?L8HFJ[R+[W;:B[^07X;WR,V:(@#>T+#Z_N-Z1&:QD"-3T:DXU_VH. +M9U:Y%$#;.\IX*IMH:S+%V?6O:;PF9*L0E[]MP#<\SKJDL34AC4T^CM8>Z:K +MQ-U;#]?\%#Y?"D =4?"V?&J*@Z=>22C+'9^.K02&[8R%\;^@U6C6?.LB(&4] +MLF(%VR$ KPHS)ZA_2@UAFW(QE^N@;_UKH4L+Y] :X#;/JH5F;80MH,G9$5JP +M+-T"Q DG^;G>A)BD-A_F2F&E,S_JJZ\5#Z0%(Y+5Z #D$ ![J3XEZ+ZUA<'\ +MJ/1=' <>/"NH6P@,^7%=( +6 ! (FTJVLX;J;+EE.0'!28QY=?F-W)&;(6YQ +M[B.)O=5ML+0B!H:0)[OMZN, (GP!F"Z'6[[3GW+8V2^'$A50QFO>;G#/2M@/ +MU95Q;B:R9K"MQC8D'1736CQ"5 YC_W/ S%7O%V7Y*/)5O,?W@-SMW/1N[\Y? +MW%/W 7G$)?+:>@FUW(^M.2JAEN0.2*<,P=U2WKID2U'^7>:;D#G%@OXQ R2 +M\!#R7VP1)<.+0LGYD9US"WRO!?\MA;!#=6DM*X0LIE?O$- ?X0",\0VI/IF; +MS1NN+?K#!<X8D.=B)4[#NY3)$[]8CO!7 !>7:YTM%7+KPY%]"R&MQ^.CSR.A +M\^B%?4OV'#I (G!U<9K]I+J:>F'?:A_!$ "H9:\1.J4!752F^=GZ4Z=!7N+; +M;+ I4422SWPNG#*%SX>VJ&D4NP*189F;AXCD&%/D<-H.F^^(!TV^I3<T;N09 +MH,CGE493B8DO3(4G!-CKP:'!Z 9)PI25N7IP3X%"=:4Y.F,+BR'"5MM&=!+] +MQ4G*FD7B8D,Y:/185&'[/Q-:MN6[236I.^*AP$PB%1B0ITY$V"V&@DN=O$JG +M2=$ O2,0IPF##DV'!Y%$3"H],T.1"7N3YFO(+%2:? <@E?$&B5@RDBNJ!1O% +M@F%#:BKE(V[_YH?)79O;RN*[5'&G?C-:GT\'3.&8HI.A,X%_=.(3 !RA -3I +M;%Q];YODV>?Y.V^A=V(T4<:+6>C>*]Y8SSS_6")&?!6H5W59)N=G4Q=WMV/K +MY@I?X_TY:3/HH#6H!;F']C$/0R$?0]O86O66JQL9HF@_ 00 .8AZCS0>(UC +MYSFQ[Z<7=2BN1YVK%,M]:&]F.:U]'_56^8K97OX_L5<@'Z@TCL3D6T+NS&6X +M69]"'CM;PD,3]E].P,U$G[U%^E1C]"EB.R#9K"AK@>K=<ST*_S@CJS@-EH/_ +MQU "1U&_L:R3@@;/D[V"=\0/#?.>&WT[U?]T)N'J.'B3N#.&,\ >0?C]3KPD +M,.DL49<\1.8BC?]EW8YP1?$KC=^#&D1?$&DWHJ::A=C=1!#-@!L"N203V35) +M6SDA/ QR!]I>^YW8 AH T>C03 LM!]99\?A,';CJ@]S2]1]MM;Z? TQ%/@0L +MLYE2W T>>@:+*\P^?//5(EH$ F$ O&$;@0A4&32%V)B'7L27VC0=I=JL46K +M*C*UABWBT_XOM>1B/1^1-NT*^VX(-%&\0#W=]Y9NL@!2JX#K7Y.'XQFF&?+3 +M-9\SFE;1O])NN=@ U)-> )P0 /3="5)=14+AKK0T+J.SHV\_S7INM"AW]TO! +MR-!GTOC@KJ@[9ZW)5K-LR)T+E9W! %M(BCU*OC;T4MGH37';(<7Y'($)2D78 +M:M>J3'P(X:6<=9N( .0\ !?[03A\6+R#2V%T7XB()CCJ4,!RG&TN.^TU7DB/ +MF<2]UZAY@A:$H,JT4;J.25S&)M3)\_R]LO>FIT3R3'2>(C"OVN>5DCL M_6! +MI<RHX+L?&@_UD?)\@*5# .;$)(6.%ZO.M=(OUY:\TEF5*_Z$N9<ZGBQ!%H4 +M@U*UYA.'E16]V2M\D(X0" P6QVBJ'+6@]P#VOD:-?<4;RLP1YMVXAL;2VU!9 +M879(I^H)ZE</_X]>1)POCF<A ),)[BK2.8<\:+G18RY _R-L"X_H$J;0!\A" +MP-Y\:>4QATH#3[BXL8).CAW24%@$+=/UB[:#D EVZA25T%Q--_,5FH=( U9^ +MAVHC-JQ>/[MSSSAG/OI2KT05NA E)E?#_;GM]//,CLJP_-./I2>9OR*511( +ML=[^;N+]W0O=F%*4E $"3Z7VYQQR#"H2DO.5MSY1I7.NL3"WEJR21=@I;\MD +M!'GR"GZN\H5'2I&8&@5^,N%V<LQ> U"; 5"<K?''W*TL.#U--W/&9]#J;:@& +M49OR^,0#X:*@4B,ZUQ!SJ42%V;K/$A@#<(<ZFU+<4NCELOM.!Q>F+[Y-U^$* +MJ^U/C&+L>\ZY0"'49H, H15UYLSC*?*$+P"!UQ#E9J)<'$JE/^D\/01R*#ZJ +M4:>.)=!3 _/:0^8(I8TB%N9@&F"<]OP4T%@4R)T:5]NZL9,DA<:Y[!C(C06Y +M*^(9V*#?D-A5FAL^I2B;VBE0:%A-@/1U+9QC<E;#.P 3X0 !,$S!(V;Q0=#V +MC]9#S^(+E/^1Q;_@8_G9RKG-]NF4H@LS:2=-9N4SD_;D2LK+\JBO=\J\G-.G +M*2#>EQ@U- S1#( *#IIMW[(DTS _Y\+_R4P42+E!?>T15SQ"(@/Z ,0 (55 +M,S[,%@!VKC"W0MOBV A+;38,-#Y+UW'A^0L)Z1W-CMZ%)7!K(__<6:$SO(7A +M<3UV:H81'\E^^6$>@U9.K"Y)],3(0U@PL)12HHX1?+[M]$?&*RWH<@Z[[%UO +M7[=URTK!NC@C,2"$,Q*<M$@6V@URQD!"OA^&:'"B3Q!#D!E3Q&P+'&@!*A=: +M#OG/(^AJU//&&\#;,<Q\>\X#/4N(T@OEA<_(NX;E1LJ-X8$4C0Q[,I(4]E2] +M2>'$)]R<ZK%82A'Y$Q VZ,9Z*9[T%C\*\TFFSW>E(Z.DOEN"S*)R+S401'^^ +MG1.XJ,(R3LE,,ZV\GOZZ=JPA,BY,S3(^$Y&T</[9-KM<EX5"%!K]1LS=^.8X +MA])I!]$7&@+Q_CZUJZ[#N>YO' @"OJ$ R6@& ,HIH;F;WETN&P^VQ"%Q0U"? +M0X86:RG2;*D(WT-@E1TB(* P;;2'X\)>9\6>PSM]T'@PY7^0N-@;WIW:Y-?F +M1%Y$Y83>LDT-7IY!MBFB=@X'U=BC/$9QA,+MS1SA(B< :Q AQ%^N^)Z:6BH +MC>RH""=,86GS:AHS==.M!@6K&NB;0OK>80[<;G*FRN#3Y:NZ,'I'3M>JRN8R +MPT8VA+3%]<F,-ZG&N-$[OBIC]!9#%,T:N;4]*PHZ1Z1X8;;XY-\L$3E9%]A8 +MY@ 0"H%]3-#VD0X3Y7PXEXR.3J_7I\H:@)VJ0YRHBT#+:1ZW2).N1V1#>DNC +MB?X6"Y'9P1A^IQLO 8"B#%>A%R5)\=O%???*$\1-H==B?M'<39M\!H+U=\]7 +M_DG>8MMZ_"M);D"< WZ0 )/$&I:G'Y2PC=R3HG?M-W_U"9==$&:Q*L5SL ! +M$V<MPWR*V-?(R-B$F7M=:B*^+^W/P7CF[T.<)?3Z&<DBKUF8RIBA^)EH'J7\ +M9'*1L,>6M;8WE3P9ZT0H?4V5]2+5YE2JFD8"\,YA;P 0 " 0 !P * +M X $@ 7 !P (@ I #$ . ! $D 4P!= &@ <P!_ (L F "F +4 PP#2 .( +M\P$$ 18!* $[ 4X!8@%W 8T!H@&X <\!YP'_ A@",0)+ F4"@ *< KD"U0+R +M Q #+P-. VX#C@.O ] #\@05!#@$6P1_!*0$R@3P!18%/05E!8T%M@7@!@H& +M- 9?!HL&N ;E!Q('0 =O!YX'S@?_"# (80B3",8(^@DN"6( +M $ 0 ! $ @ " ( @ # , P # 0 ! $ 0 !0 % 4 !0 & 8 +M!@ & < !P ' < " ( @ " ) D "0 ) H "@ * H "P + L "P , +M P # , T #0 - T #@ . X #@ / \ #P / ! $ 0 ! $0 1 !$ +M$0 2 !( $@ 2 !, $P 3 !, % 4 !0 % 5 !4 %0 5 !8 %@ $8 16@ +M 8<@"48 "H"D!WW$HT!&090 [L"X1I8!S08(!TN&),EC@H5""D 0%0$2L7 +M+Q#Q!9(&620, < 8 MJ$V,A4@K*%.0:RB0- #,%L!JE$-T1_QC!$AH#JAHD +M"P<!5 &@ E8.'PI8!R,4[0Q%"_8'P0+I"+8+H RV&9\+RP9<((<.9 <<(T4< +MH@"C$@< 100#C\'GQ@;"5TB[R/L)<0921]U 9LE\1:4 D+4 U[$B 51 #K +M$$$=\@D0'M8.^Q^,#QH&QQX> #X(T Z#);H@RAGP&K<890ZR&/D(]P\B$_$! +M+0]=#K$!FR0 ! $# FQ#]D0@1OH',,8HAMK!>0:#B9"$\<:#R;:"H<F,"0M +M!]P&1A:T&"T:VR#%(%(A0Q##$X\,X0N.#P,2JA)B'?0 2;0"Y,CJP^G%GX! +MB@(T&:0F=@S% Q$:WQ.0&[H0BQ@S#I,#?!:@ L60"!<(< *(@GZ(MH3&0?0 +M =H&LQP6''HDFARX!<@,SQ4J"@<!:"*7 $L+\!V!%-4;9!<](N,/B _.' 8< +MLQ/7$=$ 9 @D!;P(R!6B&14F.@XX#* !\1]0#6L+K0T[)94#[R7&$FX&]@ * +M%7H+J@VF'@(!^1'&#!T+AQS4%#D810H/#+L9L"'U)90 %@_7'GXE_0BM%[X; +M@1M2&7\)- '$%XL(0ALK&Y43G2 O(XP7("'_!4\ A* '7@,WA+K(;8"3B(X +M(^H)02)J$T,D8!7;'B0@\PHJ&E(4G0GG#ZX&/@K+(:,!SR< TA,!(-$Z,) +MB!S]"O D$!41$[,>"Q9Z#>$35@F1&DLFY"&Q'<\@FQ^X"Q,9*R&<)8(1;QSG +M %L/$!UO)B$#$R'*)-L:,A@(#44!K1''&](96 !J(J4"$0RT!M,C,!MS'F0; +M> ^""_< 90!W"-T"61J@(T88AP,F!APBD1AN!9(7XAPJ&^T<,1"5)'PE"AH+ +M&9 *D"8+ ?L7^@"/#ZH*YB/\).<'JP?6#V0-,!*-)?\,8PX&('H B130&342 +M%1 7 *@=Q@_@#>T"DP4#"+L+#0)##.$'4@$M!K@7'R,%(WT?EA-[%KX B5 +M"APF12#5$Z,F:0MH&C<B%2#U##0;A1E?(#\)K@8V&V$%6!=H#RT79!>W(:L/ +M-2*8(T<,] XY! 8,T"0. ! %$"6_#%80OQ'1(/8E7 36%<\10"8B!CX)O C* +M"0@A)0C%(]\"J1GF$Z@@;1'>'\D)'@Y)&:<@>1<W$N B2"-K &X2, LM%X - +MSAYQ"F4&1AAL%><-[05@ ?L8+PD<#XL?L0]8!PX QQ_5 EH<EA>T&0T1 0'% +M(K .WQ-$(LD5Y@E](,,"UA7P(S$- Y$%%P)0B!$!CX%+@H> X<6C!HK @T+ +MUR6N(8,.LPVN$$D7O1C^ 9<(7 #P&,0*6PZD(3L!E QK#FD8TA &$IL L )U +M"R4D2!V/$7\+3P*6!+X;$Q=>)>\-HP$R"_4 >!FB( 4&R@GI)7PCQ!/=)>\* +M:"96'3T8H21D"/D&/0Q")L(!.Q+W!,$ Q#P#.$@BAN9!O<4W1>^#M\3M!\D +M!N\D6"9=&O0>%Q$<'U0&/!2L&%, 4P'Z CL-8P8-'ED$_@W4$ET<41>C"8,B +M-B*B)(8CJ1'J !00 )@&5H9(1M2)/D*^Q4,(5D7HB'((84 'PK1(TH?YAT% +M'U(;0!RZ 2P&Y!$4%>X>*R1Y%R,6O!\ !/H6UB9< /DE9B7M)-$>^0,, (85 +M4 JK"D,5]0.S#_ .DAC\& B+Q-V!$<>LB2P 7(8)P'2&,0&EQTK(R<=,A-8 +M'DT%*@#Y YP@EP<Q$PT'$@<I"P@,Y@;H ;,:/@ Q&QT#;A% $=P#S1/2)-<, +M$1>#"H\3[Q:M'AH1WR-K%>HFE 7N 2D%$@,.(+0<Z!.T#+L46B37&]P:\ M7 +M&34$=@A+)(D6+2"\)$DF% YS%*L611?0%GX;0"4\&5T7FPS%"=(%F@RX'O8F +MQ"$.'AD3(QCP 3,@MQ R'?L=Z@G5!/,()A,5#U$00A'2"[H8/@L5$30!H A* +M(]$BNB)Z%K$&$A1H%242U1AB'CL R.P$P4>*1G.&H<BXQ/M$@<ERP2Y J,! +M5P55#U\%<1> &^876!-]$- "9!D!&W<AWQF#"<XC#!?,&*$CM <O 'D-HQ0+ +M(RL91P/[ /P"71&V'(X/KARB !@:\!(Q%/L%BR!2&7T=]@@;!!@9(1)Y#,@B +MN PA'0T.>QUS)MD@4"6K&&$FW16](B()CA_G%440$!$Z 6P"8 =Z&SH?GA", +M"9T.#@;: Z0071["),441@.( *(8<!C)$1P#$A!'&>$/+QTN%-,FY0=O$K05 +M)AUJ!C("M0#+$T(C#!ZY#3$A>POE "T@A2%C&X0E^0+'#Z@@5":@(0\/WPW9 +M!T82,PZ-!!D9#1[M![4-SB%S"L<$)@R0&P<D,@ $#E(,[0<\)+8%71KN 0DB +MC@S3!APDZ!J^()X.X@45).(9W02H#-TC>1U( NX&0P99)E +B0B;$' 75R M +M!M@$\Q%-"%8&CR0= AP101OW'ODFV!R6&S$.P!(T!X(+.A.0"ED1""3["=<0 +M7 BM#'T*929A$1L%7P'8&N<<CB3@%F<)!1ZX#YT<RP1K(Z@9:1XZ""84+R;' +M%#HCZ OQ%=\<4 LB(N0%+ =%ZD$DP=(!Z =Q@_=%?@ ! ]@"<H"W@OW##0> +M!A#C'L\</04""U@,3@C)(<$9A@+ !]8E-@S>'D<#/@#7 / BXP@')34 & 7> +M ,TB;!_[)@<!U -5#M07V 97$_ 86B *) H&S@DO&GXA*!_Y!G $.R,L !TE +MX",R)GD&*Q&Z *L)Q0, !9L1M1-6'0@$504E(I< JB9J(WH?3@1I%B\6- Q +M#@43D@\A%*@4<Q)S$> #UAG<$BP4H0#V&=X311CP$PH;VB*\$%09G@(P#[ > +M;QL^&)4,JB51 ,,;D M7#"X7" JB&/T: Q]F(^H/_ M<%VL?Q1_X)K<CP A? +M"6 3I@IN&,P/ B%&(T0BL ZS)AD5\0-'#FP8R!*6&LD7VQE$ ^\)MA ]$-$. +M*@L:(C<)MPQ%&&H<?R.E#JTB_AH""% %! ?@'%(!%0*T'=(&8A@%!]P"F@WS +M%8<<U WZ)L@#IP&N#C$!P@<2#_8 '0.4 S\2XB*3 *D<:R6?!?$1/A'D!TH& +M @S=&ML;Z".+).0E_ ;7&Z8A Q4\$Q "2A?"#N0A;A?C'.40EPA^(. "0"/\ +M ]H*K!C7%MX&*2(; *4-7@C[!P<8(1+]!,H9UA/R$Y$,)P>F')L$D!D3&48# +M, X)%8D3'0TR%O8.X #"&<@ @ 8N$)(BMP93#WH<912I!&,C?04>%\$.TPP3 +M"!HB&":0)I ,'11J%"0 !2(@!7XBI ,S!3$DS"' %"("E!2?)=H0[!WO ](C +M)0Q% *(,VQ3.)I<+D0_)#*LG!"8U&#<-NP[$"G8*O26,(N\BJ0=%(EL/[QA9 +M! 00F!ON'7@&.@>#!J0+OR,-&?H'@P<*(9$7S@<O!;D>NP7! "0)P -D":0( +M-@J='I8*UR/5'78BJ"#T%5,"_!%/#MX=<QS^ "<8H!.Z&KH!@R8%$M<, P;K +M)<@CGP"V%X$ ,06C)4<"BP4J(Q@*00=##E4 \ &]#O48(P[;'M80BPR')&,A +M'@IB"HP"APCX!2(7QB+Z .P>L 9%(5H+'A/A$D\.A":_"D42V29T&*L4I1.B +M(U\#41VR$<4C]!^Q 9L<:Q%,#TH2SA$[%J@8&QR8!1X"N2)%)2 930LP#_@# +M;B&Y#K@*?A/G 00']@]!%]\:* :O(IP4B #_$A$E$!,A)(<"Q"0.%#P&$ ,P +M&FT:ZP6#!5$"20G %S0COR#S'T81!"/ (7\%C23" /$,#0Q9#S(A%QNZ!#T; +M$!=% T\>'P*=#WX B!P.!V@&9R,#'84FU1SH'VP841$K#<4*P _K!9P7R2.3 +M%UX L12B%_,6*A;V![<D$P,%!X8;.A;! *X 1S0&/,+7QD]#J,=. :: ,8B +MHA?W&64<>0^X!)T+*PP&%M8 D24J%GT#MP N# L""PT<'V0.0A 7 *4BN &] +M#/P7+B:V$,0+6P82 %<0X@7Q#(<?\!Q%&0,?M1AQ%Y<C>0D+%L@%IQYU"$T> +MXR9['.\A7@L_!:,:& &#= :<QOV' D6: \ $O\<* V2!;@F%!&@$AT1*!0N +M(6$.+00* <H,'PFG WP>;A6<",4D2B-J&C4!M!.\!N@1Z@EH HL55@4&!\X' +M&AO[(80/4@T:'< 161W_!Y\+8P?-%.T$:2)N#EX3ZQNK&RPE]!N4$"$<F2;2 +M&U( *Q2P'04$*")3!?\6S!I1%/ D61TS$:P)#0 ($9@>4B,2& ,?3 C:!+HF +M0!#3!0<8/1'C$#P!! &]'?8"W0+U)=8"YR7X!VL3Y"2/'788BQ; (.H-?! _ +M%*H -00H .<1D23A%(0&JB/4"'T3*Q+F#2<>GQ%"%^@2C0].#S(!'B'0!G,C +M(@<1%.,?X1"W&\L=NPH8#Q(9I24#$&4FW0P'(;L2<ANO#5<9*QXM"_@D90 ) +M'<T9QQ1J#\0?VA6X&@$:1A*[&:4&XQ*\#PH(20L=$9P5>!K$"HH?CP*.%IT: +M^A+O&R,BB1S/)FXDMA3/!8TB123/)#X"/@27 M B6 =4)9 :!P9)#? +)1#S +M!^\:( 1G$RP2VR.E&>(:(Q0W B0-V1V@$><'8 -!'I,+=B,E W40<0@-$20= +M?1M5#A E>R(^(_,4E NS"*83J!NR#NX31A49(?4$# O6#:0(DR53(#X!:21; +M%S@%X@</!TT&)1GT#)<2H"$:(7<.)!P_#%,(_ !$% DJP1("[4=J"2[" 4? +MD0M7'XX151W5!3P2Q@I>'=\B"B! !*@'V \8%F0/3QGA((0:K1QP%64 %A,$ +M%50%[06T%(\/?A+R&+\&?PR3$\0ES CA)G<(W0-K!B(1-P-C&FT*(Q<C&T(8 +M( UA(;,!>076%[<:=@SQ"9(91A'!#8\-F0)C @@D [7(Q$AA"+Y$IP;?":4 +M#X BAA@='5L@9!+"#\D$I ,U"1D+T! )$*@=_ Q/!I<3W":L&K<@PAX*)+,A +M#@\Y"<D5H0$,%=L)*Q[0!08,N24;&E<>UA96(JP<5QT1(9(:1 #_&E,C0A>V +M!/\%\@X<#+PBCP*+%"X3- ^*#<,4?@WN%+\@9@ T'Z 7!@8F'B( *PB("=LE +ML@8G#&L&<PVM#K8@&PF3#+8+'"(5%^\3ZPEH".L0E":?%\$E]Q73)?H:D@1B +M'"@D)@R8)",FT!8O);L-& /@(^$>@07>%049NA.6!ST#H!0B 886>")+"#0* +M=0%*$%(7=P0((*<'?0RP(H 13"2Y$U(6?A/- 8@(MP%:)/ (P0CX$Y\AFP.. +M!FDBZ F+)#@# @DV!?$3RPHJ -063P#P&&X@'Q ,$7@F$PC&(_X0D@T"';TE +M=1=7 TT<UR(+$CX8M0_B).@F^ YE$C<#,QAO(V@4\0*=!# E4R&R"P$5_R P +M#$$..!%)!B0(50G:"(\<?@VH%'<%"PN1"FTB!"7Z#0<-/ !-"-T@X!_2%.0) +M2".H$"\"(0'#"\06L V>(NP630-Q'L@"KQT_%[,.B VZ%I8/3R'^'C@-91 " +M"GX<XA'V ;\;K!Z5$A$ [Q:S SX#"R-A%:@A3!'!"^HD41[=(A,C$PVQ& P% +MJ0:3#=D!M09$ I$&.B&1%HL7$0]H!GL7A 4@ C 3?A-U'WX8AQZ6(1T&FA,& +M $#T 6#)K\AC1_V%5X0M0$V'-P+"QFA$E$.'Q(<)/$3"@GK%UL.91[/"(<- +MER;G#<<.0",M&9H#%0NK$GHFY!Y9%, -6P3Q"Y,?,Q(Q ZP44QM*$>\?]P-B +M"0H3- GB"B 'VAF\& 8)H0HR'? A\@4.$=P>X@I^ $L=JPI](CH@=AU>#R8- +M-A]C)P8%=P5Y'1T "0Q '@P#/PY^!S<5JPS]$&$'TB'R .,%& TN(8X0\!%< +M'JP8\B2!&;D:>@_7%L$"Y2$!%=4'J0->!+<2^!SX$5(?V0EA%4H%M!5+#:D1 +M#2;S(9(&&@2<'G\78 "-(&L7!Q#\$/8E:!F4$_X3DA^$ ALC=AV;!><*^!D- +M#UX/P08P$!(>RQ_K#U8<A %3$_<C'B'< #\#@ V( SP/JR1: 2H-XA"2 BD# +MPPXH ;4;8AC0 8D!EAYW$046D!:O&!D+6 [# 6$A3!>["JD3%QVR M8:D11L +M#^<4^AL<(%88HQ/\'8D?@ ;$#>@*HAQV(8PF11!?(Y0CSA:R!*H)N!@7(LD< +M=!I])($:M1';$X,# P*.":H5415O'%(8L![2(581PQI""%<3:!7, :(! H0 +M&6X!1!#/ LX:]QM;(_H2NB)'"Z8 X@)E''$ PQ[U!;<1CQ4@):P;0"5K(P\$ +MFQN7'8H)$!HM(O\3ZAI[!2H3BQ.K";TF3PVZ!,P'0P2U)2P)$PQ! Y<)KQ73 +M)) *;!",'X(%=!JB(3$*&QR^(*P#;R:-".@#XA7@ 5X8%@<$!ZL3K0'/%S ? +MO0KL#5@:O UO FP*MQPP"6T88ABY#<\+Z"7T#P<)FR;;)E\6Y@*L$[L&81Q% +M#_($40])'],2% DF$\P@O1:((30E, P*!YD#K03>!Z@+SA2<&900F![5'F $ +MVR4""_<A&@F\!GX?T"8H%O8-^ 5Q'S,$<@1@#A(/ZQR: T\%+P/# B8:9AXT +M'[,0S!QI"_DB[AX1&",2?2+&!W,D60,$#%<2_B1A'R@ 1Y@%AH%^B ]!-D: +M\QY) IP@,@J5%,89#A.W&J8-/A*!%04/Q"6,'0P/HA8/!P<!KQFQ#MX@[1#[ +M'BP(3 ^X(A8*31X^$-(F= VC)<((I1A'(ID(7P3A' $7O2,]$A04D!/?%"L) +M"!YG'TP*]@44&T0'(R:)!%<7!2'!%,0?,P7I%8,+NR/L'. )4PF^%7<3=Q*F +M#-D:3R&Y&!P>A0 +'P .0!O](;X0IP/J%KXBG@@N! \@#PK%"+8ER ;7&&T! +M!B%T(24A\P[B'U@8@AZ!#!D,+Q[3 .HA;B-^ Q0-M17U&U<B,Q( K0/%1&E +M NT,# :A(4(6BB0G %8F! <O%_4630O_!S,50!F %$HF20 0$@H4' .G%$T7 +M>0-L('L:$ *[(B0)3 M""8 :"@=M!?0CZAEU&1P2I0R6"#< 30YP'*DDB!L. +M&;83EQOY'_L!T18! OH9B@T9(F@;"Q^9!80'Z2-](QPCHA;.%4P&TA@=&ZT3 +MFAOD(;(8)0=_ ^(#50SH#> <901<(TH%AQ>U'O\2PQ(3(48-JQIA&PD1@Q#Z +M%&(A&@NA'O 2-!IQ"4L*^Q3O)7@FK!I")ILBUQV@ JT-0R0)"XX!8PF)(M0= +MQR1N'R0@KA^[%5(@5 S^ #@!^@0@!SX"]@XN#108)!@6 *4>VQRL%.0DE1._ +M"_H-?A? )G@ENAZ7&\0@;2+[ AD&-A0V"\@7Q";* 4L1R! !%/0B$QF&%941 +M<!:X)48*51Q?'OX%AAF:%U88DAUX(M(,L2*(%-08=QA"$ALEP@Z0$9P<>Q;7 +M&2(D,1[&&,L!90V:!TPC_@<Y%SL2/Q9($VTDD2'[$!,9&PZP(A@&KAM!!QH& +M,0ST%X "F"#W H@@?A%'%6</#2;=%W82'"7=%N$9;@6@!>X@N 3/%E4$OP.< +M)$8%]!:%#F0!Y0,9"3(=20?_ S@'I18T)+(D"B+4&>H*1A2*%+P X":Q"*<3 +MF0)3$LH<M!,7)4(6_QL%)8@ /05,!A8"U@G:&GD;(PR)#0,ALQ\0(?</XP.T +M&3(2:QW/'Q<>Z!/B(S<=YQJ]'3H+)0ZR%OP K1E/'E0&Q " ! , +M!@ * \ %@ > "< ,0 \ $D 5P!F '8 AP": *X PP#9 / !"0$C 3X!6@%W +M 98!M@'7 ?D"' )! F<"C@*V M\#"@,V V,#D0/ _$$(P16!(H$OP3V!2X% +M9P6A!=T&&@98!I<&UP<9!UP'H ?E""L(<PB\"08)40F=">L*.@J*"ML++0N! +M Z( !5;FMN;W=N(&5R<F]R H J/T *C_ "I 8 +M J0@ *D, "I$@ J12 *D; "I'X J20 *DH "I*P J2^ *DT " +MI.( J3N *E! "I1 J4< *E+@ "I3T J5- *E7 "I6T J6! *E +ME0 "I;0 J7# *ET@ "I>H J7W *F#0 "IAP J8H *F.P "IDP J9B +M *F? "IIH J:Y *FU@ "IN< J<& *G)P "ISX J=8 *G>@ "IY@ +M J?( *GWP "I_X J@. *H)0 "J$D JAJ *H@P "J)T JBY *HT0 " +MJ/( JD4 *I*0 "J3P JE> *I<0 "J7X JF2 *II@ "J;D JG( *I +MW "J?( JH4 *J* "JC8 JI. *J:0 "JGP JJ/ *JLP "JLT JKK +M *J_ "JQ( JLC *K,@ "JTX JM= *K< "JWP JN3 6T5R<F]R +M(# 3F]T(&]W;F5R $YO('-U8V@@9FEL92!O<B!D:7)E8W1O<GD 3F\@<W5C +M:"!P<F]C97-S $EN=&5R<G5P=&5D('-Y<W1E;2!C86QL $DO3R!E<G)O<@!. +M;R!S=6-H(&1E=FEC92!O<B!A9&1R97-S $%R9R!L:7-T('1O;R!L;VYG $5X +M96,@9F]R;6%T(&5R<F]R $)A9"!F:6QE(&YU;6)E<@!.;R!C:&EL9')E;@!. +M;R!M;W)E('!R;V-E<W-E<P!.;W0@96YO=6=H(&UE;6]R>0!097)M:7-S:6]N +M(&1E;FEE9 !"860@861D<F5S<P!";&]C:R!D979I8V4@<F5Q=6ER960 1&5V +M:6-E(&)U<WD 1FEL92!E>&ES=', 0W)O<W,M9&5V:6-E(&QI;FL 3F\@<W5C +M:"!D979I8V4 3F]T(&$@9&ER96-T;W)Y $ES(&$@9&ER96-T;W)Y $EN=F%L +M:60@87)G=6UE;G0 1FEL92!T86)L92!O=F5R9FQO=P!4;V\@;6%N>2!O<&5N +M(&9I;&5S $EN87!P<F]P<FEA=&4@:6]C=&P@9F]R(&1E=FEC90!497AT(&9I +M;&4@8G5S>0!&:6QE('1O;R!L87)G90!.;R!S<&%C92!L969T(&]N(&1E=FEC +M90!);&QE9V%L('-E96L 4F5A9"UO;FQY(&9I;&4@<WES=&5M %1O;R!M86YY +M(&QI;FMS $)R;VME;B!P:7!E $%R9W5M96YT('1O;R!L87)G90!297-U;'0@ +M=&]O(&QA<F=E $]P97)A=&EO;B!W;W5L9"!B;&]C:P!/<&5R871I;VX@;F]W +M(&EN('!R;V=R97-S $]P97)A=&EO;B!A;')E861Y(&EN('!R;V=R97-S %-O +M8VME="!O<&5R871I;VX@;VX@;F]N+7-O8VME= !$97-T:6YA=&EO;B!A9&1R +M97-S(')E<75I<F5D $UE<W-A9V4@=&]O(&QO;F< 4')O=&]C;VP@=W)O;F<@ +M='EP92!F;W(@<V]C:V5T $]P=&EO;B!N;W0@<W5P<&]R=&5D(&)Y('!R;W1O +M8V]L %!R;W1O8V]L(&YO="!S=7!P;W)T960 4V]C:V5T('1Y<&4@;F]T('-U +M<'!O<G1E9 !/<&5R871I;VX@;F]T('-U<'!O<G1E9"!O;B!S;V-K970 4')O +M=&]C;VP@9F%M:6QY(&YO="!S=7!P;W)T960 061D<F5S<R!F86UI;'D@;F]T +M('-U<'!O<G1E9"!B>2!P<F]T;V-O;"!F86UI;'D 061D<F5S<R!A;')E861Y +M(&EN('5S90!#86XG="!A<W-I9VX@<F5Q=65S=&5D(&%D9')E<W, 3F5T=V]R +M:R!I<R!D;W=N $YE='=O<FL@:7,@=6YR96%C:&%B;&4 3F5T=V]R:R!D<F]P +M<&5D(&-O;FYE8W1I;VX@;VX@<F5S970 4V]F='=A<F4@8V%U<V5D(&-O;FYE +M8W1I;VX@86)O<G0 0V]N;F5C=&EO;B!R97-E="!B>2!P965R $YO(&)U9F9E +M<B!S<&%C92!A=F%I;&%B;&4 4V]C:V5T(&ES(&%L<F5A9'D@8V]N;F5C=&5D +M %-O8VME="!I<R!N;W0@8V]N;F5C=&5D $-A;B=T('-E;F0@869T97(@<V]C +M:V5T('-H=71D;W=N %1O;R!M86YY(')E9F5R96YC97,Z(&-A;B=T('-P;&EC +M90!#;VYN96-T:6]N('1I;65D(&]U= !#;VYN96-T:6]N(')E9G5S960 5&]O +M(&UA;GD@;&5V96QS(&]F('-Y;6)O;&EC(&QI;FMS $9I;&4@;F%M92!T;V\@ +M;&]N9P!(;W-T(&ES(&1O=VX 2&]S="!I<R!U;G)E86-H86)L90!$:7)E8W1O +M<GD@;F]T(&5M<'1Y %1O;R!M86YY('!R;V-E<W-E<P!4;V\@;6%N>2!U<V5R +M<P!$:7-C('%U;W1A(&5X8V5E9&5D %-T86QE($Y&4R!F:6QE(&AA;F1L90!4 +M;V\@;6%N>2!L979E;',@;V8@<F5M;W1E(&EN('!A=&@ 3F]T(&$@<W1R96%M +M(&1E=FEC90!4:6UE<B!E>'!I<F5D $]U="!O9B!S=')E86T@<F5S;W5R8V5S +M $YO(&UE<W-A9V4@;V8@9&5S:7)E9"!T>7!E $YO="!A(&1A=&$@;65S<V%G +M90!)9&5N=&EF:65R(')E;6]V960 1&5A9&QO8VL@<VET=6%T:6]N(&1E=&5C +M=&5D+V%V;VED960 3F\@<F5C;W)D(&QO8VMS(&%V86EL86)L90!-86-H:6YE +M(&ES(&YO="!O;B!T:&4@;F5T=V]R:P!/8FIE8W0@:7,@<F5M;W1E $QI;FL@ +M:&%S(&)E96X@<V5V97)E9 !!9'9E<G1I<V4@97)R;W(@ %-R;6]U;G0@97)R +M;W(@ $-O;6UU;FEC871I;VX@97)R;W(@;VX@<V5N9 !0<F]T;V-O;"!E<G)O +M<@!-=6QT:6AO<"!A='1E;7!T960 141/5$1/5"$A(2$ 4F5M;W1E(&%D9')E +M<W,@8VAA;F=E9 !&=6YC=&EO;B!N;W0@:6UP;&5M96YT960 +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +M +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! (I@ +M =! (J E! (J T9 (J !79 +M(J !?@ "!@ "3@ "Z@ +M #3@ #Q@ $/@ $I +M@ %+@ %N@ &+@ +M &G@ &Y@ ',@ 'D@ +M 'P@ (M@ ):@ *.@ +M +(@ +S@ 1 >0 (J +M1 >0 (J0 1 >0 (JH ,D) (J 1 >@ (JX +M 1 >@ (K( 1 >@ (K@ ,S) (JX 1 >P +M(KP 1 >P (L 1 >P (L8 -*) (KP 1 +M?0 (LH 1 ?0 (LX 1 ?0 (M0 -C) (LH +M1 ?@ (M@ 1 ?@ (MP 1 ?@ (N( -S) (M@ +M 1 ?P (N8 1 ?P (NH 1 ?P (O .*) +M(N8 1 @0 (O0 1 @0 (O@ 1 @0 (OX .C) +M (O0 1 @@ (P( 1 @@ (P8 1 @@ (PP .Q +M) (P( 1 @P (Q 1 @P (Q0 1 @P (QH +M /&) (Q 1 A0 (QX 1 A0 (R( 1 A0 +M(R@ /=) (QX 1 A@ (RP 1 A@ (S 1 +MA@ (S8 /L) (RP 1 AP (SH 1 AP (SX +M1 AP (T0 0") (SH 1 B0 (T@ 1 B0 (TP +M 1 B0 (U( 0:) (T@ 1 B@ (U8 1 B@ +M(UH 1 B@ (V( 0K) (U8 0]@ 1W@ +M 2K@ 3;@ 3M@ 44 +M@ 4P@ 5.@ 5J@ +M 5W@ 1 L@ (V8 1 M0 (W 1 M@ +M(W8 1 MP (WX 1 N0 (X8 1 N@ (XX 1 +MNP (Y8 1 O0 (YX 1 O@ (Z8 1 OP (ZX +M1 P0 ([8 1 P@ ([X 1 PP (\8 1 Q0 (\X +M 1 Q@ (]@ 1 R0 (^@ 1 R@ (_( 1 RP +M(_P 1 S0 ) 8 1 S@ )! 1 SP )!H 1 +MT0 )"0 1 T@ )"X 1 TP )#@ 1 U0 )$( +M1 U@ )$P 1 UP )%8 1 V0 )& 1 V@ )&H +M 1 W )'X 1 W0 )(@ 1 W@ ))( 1 X +M))P 1 X0 )*8 1 X@ )+ 1 Y )+H 1 +MY0 ),0 1 Y@ ),X 1 Z )-@ 1 Z0 ).( +M1 Z@ ).P 1 [ )/8 1 [0 )0 1 [P )0H +M 1 \ )1( 1 \0 )1@ 1 \@ )2 1 ] +M)28 1 ]@ )3 1 ]P )3H 1 ]P )3H 6D) +M (V8 6L( 6V( 7(( 7< +M( 7G( 7Y( 8-( +M 86( 8F( 8X( 9"( +M 93( 9F( 9R( 9_( +M ::( :]( ;B( ;^ +M( <7( <\( =6( +M =M( >0( >K( ?#( +M ?G( @$( @B( @X( +M A6( AV( B-( BH +M( C(( C=( CV( +M D4( DJ( E$( EC( +M E[( F4( FB( G@( +M H-( I!( I-( J( +M( JS( KD( KO( +M KZ( L>( LM( M+( +M M9! )4 MB! )4 MQ9 )4 N:9 +M )4 NS@ O5@ OG@ P. +M@ PG@ Q%@ QC@ +M Q]@ R?@ S"@ S?@ +M S[@ T-@ T@@ TX@ +M U$@ V"@ W&@ X4 +M@ Y+@ Y8@ YB@ +M YM@ Z6@ Z\@ [1) +M)4 [G( [^) )8 \4!@ " #P \C) +M ):X \N! )<@ \V! )<@ ]%9 )<@ ]N +M9 )<@ ^'@ ^I@ ^[@ +M _B@ _[@ ! 9@ ! W@ +M !!1@ !!S@ !"6@ !"S@ +M !#/@ !#A@ !#T@ !$, +M@ !$8@ !%6@ !&:@ +M !'H@ !(?@ !(L@ !(V@ +M !)!@ !)J@ !*0@ !*E( +M !*Y( !+6( !+H! )<@ !+L +M9 )<@ 1 #__P )<@ !+S! )<@ !+]! )D +M !,$! )H@ !,.! )L@ !,6! )L@ !,:! +M)M@ !,B! )N !,K! )O !,S! )O !,\! +M *V@ !-+! *\@ !-3! *] !-@! *] !-J +M! +4@ !-S! -7 !-\! -:@ !.&! -Z +M !.,! -Z !.5! .' !.=! .' !.A! +M.( !.I! .( !.M! .) !.]! .) !/!! +M .* !//! .* !/3! .+ !/;! .+ !/? +M! ., !/J! ., !/N! .- !/[! .- +M !/_! .. !0&! .1@ !01! .6 !0;! +M.7 !0E! .A@ !0P! .C !0X! .G !1"! +M /0@ !1*! /9 !13! /> !1<! 3_@ !1I +M! 3_@ !1Q! 4#@ !1Z! 4) !2#! 4+ +M !2*! 45@ !23! 4H@ !2<! 4K@ !2H! +M80@ !2Q! 82@ !2Z! 85@ !3#! 89 !3,! +M 8?@ !37! 8]@ !3B! 9B !3Q! <V@ !4 +M! >) !4*! >?@ !45! >J@ !4D! @+ +M !4S! B' !4_! BI !5&! BI !5*! +MBJ !53! BO !5=! BS !5D! BS !5H! +M BT !5Q! B] !5Z! B_@ !6#! C! !6+ +M! C' !64! C. !6=! C0@ !6G! C4 +M !6T! C4 !7#! C4 !7,! C4 !70! +MC5 !79! C>@ !7@! C>@ !7D! C?@ !7N! +M CJ !7W! CJ !8 ! CJ !8$! CK !8( +M9 CK 1 #__P CK !8/!0 #H )D !85 P +M !8?!0 %#@ (" !8E!0 (V8 !8K!0 #8@ (I@ !8W!0 &X@ +M)M@ !8^!P %<@ " !9'!0 $0 )<@ !9/!0 #I (I@ !9;!0 +M (J !9H!0 (JX !9\!0 (KP !:2!0 (LH !:@ +M!0 (M@ !:U!0 (N8 !;,!0 (O0 !;8!0 (P( +M !;K!0 (Q !< !0 (QX !<-!0 (RP !<A!0 +M(SH !<W!0 (T@ !=%!0 (U8 !=4!0 ):X !=<"0 +M "L% !=D"0 "L%( !=S"0 "L%0 !>$"0 "L%8 !>- +M"0 "L%@ !>="0 "L%H !>O"0 "L%P !>V"0 "L& +M !?$"0 "L&0 !?4"0 "L&@ !?<"0 "L&P !?K"0 " +ML' !?\"0 "L'0 !@%"0 "L'@ !@/"0 "L( !@="0 +M "L(( !@R"0 "L(0 !A)"0 "L(@ !A8"0 "L(P !AN +M"0 "L) !B&"0 "L)@ !B3"0 "L* !BG"0 "L*@ +M !B]"0 "L+ !C+"0 "L+@ !C@"0 "L, !CW"0 " +ML,@ !D&"0 "L- !D6"0 "L. !DF"0 "L.0 !D]"0 +M "L.@ !E6"0 "L.P !EG"0 "L/ !E_"0 "L/0 !F9 +M"0 "L/@ !FH"0 "L/P !F^"0 "L0 !G6"0 "L00 +M !GF"0 "L0@ !G]"0 "L0P !H6"0 "L1 !HG"0 " +ML10 !HY"0 "L1@ !I""0 "L1P !I."0 "L2 !I9"0 +M "L20 !IB"0 "L2@ !IJ"0 "L3 !IR"0 "L< !I[ +M"0 "L<@ !J%"0 "L= !J0"0 "L? !J;!0 )4 +M !JN"0 "L@@ !J]!P " #@ !K.!P " $ !K@!0 +M)8 !KS"0 "LA !L"!0 &= )H@ !L+!0 )LX !L2!0 & +MY0 )<@ !L>!0 "> *\@ !LD!0 %&@ *V@ !LQ!0 #E@ )O !L[ +M"0 'B0 "LA@ !M+!0 &JP +P@ !M3!0 (' )N !M:!P 'EP " $0 +M !MA!0 $W0 *>8 !MJ!0 "9@ )_ !MS!0 #>0 ,!X !MY!P %^@ " +M I0 !N!!0 &3 )Y0 !N)!0 $9 *H( !N3!0 /@ *6( !N=!0 +M .(8 !ND!0 %)P *T !NN!0 .'8 !NU!0 ',P -7 !N] +M!0 & 0 )P8 !O%!0 %:0 -R !O-"0 #( "JZP !O3!P #<@ " $P +M !O>!0 $50 *^@ !OH!P &@P " %@ !OZ!P %50 " & !P!!P &J0 " +M &0 !P*!P #RP " %P !P;!P #?@ " %0 !PL!P &;P " % !P_!0 ' +MUP -Z !Q'!0 #. *] !Q3!0 %I .7 !Q<!0 $*0 .C !QD +M!0 "L@ .A@ !QN"0 #J "LAP !Q\!P #+@ " IP !R"!0 &-P ,8H +M !R+!0 #P0 .. !R1!0 .*8 !R>!0 &\0 /0@ !RE!P #P@ " +M +@ !RN!P #30 " ' !RZ!P ',@ " + !S!!P "H@ " +0 !S*!0 +M .+8 !S1!0 $?@ -:@ !S;!0 .)8 !SJ!0 "HP -CP !SX +M!0 $5P -M( !T$!0 %:P /9 !T,"0 '?P "LB !T6!0 .-8 +M !TB!0 '> .1@ !TM!0 #HP .68 !TV!0 .,8 !U "0 " +MLTP !U%!P /0 "!1P !U,!0 *0 .G !U4!0 $U0 .K@ !U?!0 " +M?@ /> !UH"0 #^@ "LJ !UQ!P (>P "!=0 !U[!0 '>P 3_@ !V" +M!0 &^P /<P !V)!0 #<0 4+ !V/!0 5@ 85@ !V7!P "QP "!=P +M !V@!0 &T 4H@ !VH!0 '# 4#@ !VP!0 !&@ B48 !V[!0 (B +M8LX !W%!0 "@ 80@ !W-!0 %4 7C8 !W9!0 #_ 3.H !WD!0 +M) 4) !WL!0 %QP >) !W^!0 !F@ BCP !X)!0 :@ 9:X !X3 +M!0 F@ B' !X>!0 (" 8?@ !XH!0 "%0 3GX !XQ P $6^ +M !X[!0 &\ 4>@ !Y$!0 &(@ 4C( !Y-!0 %Q0 4F( !Y6!0 (!0 +M4G@ !Y?"0 $S@ "LJ0 !YL!0 %> 4;@ !YV!0 &M0 4= !Y_!0 % +MU0 4@ !Z(!0 '(@ 47 !Z1!0 &%@ 4DH !Z:!0 &V@ 4A@ !ZC +M!0 %MP 45@ !ZL!0 %P 4: !ZU!0 &I@ 48@ !Z^!0 BI8 +M ![$!P 'B@ ""$0 ![+!0 %P0 5Q ![<"0 !Y0 "LK ![G!0 "_ +M7D0 ![T!0 (G B] ![\"0 'OP "LL !\&!0 %QP 4K@ !\1!0 +M50 89 !\9!0 &>0 8)( !\G!0 6P 5W( !\Z!0 &YP BT !]" +M"0 %\0 "LM !],!0 $@ 82@ !]4!0 BS8 !]:!0 (10 6Y8 +M !]F!0 (0 B_@ !]N!P &Z "!N0 !]^!P #U "!P !^)!0 &8 +MC' !^1!P "7 "" ( !^:!0 SP C0@ !^C"0 H@ "LSP !^Q"0 ' +M= "LT !_("0 H0 "LT0 !_@"0 #D "LT@ !_W!0 $E@ <E8 " * +M!0 #=@ 9?X " 0!0 &N 8]@ " 7!0 (B 9S " R!0 %70 ?+8 +M "!)!0 '^ 9B "!8!0 $H @3( "!P!0 &4@ :.( "",!0 #TP +M<V@ "";!0 1@ BO ""D!0 !3 @-( ""U!0 & ?HH "#-!0 ' +M( @.X "#E!0 %PP =7@ "#U!0 $6P =, "$$!0 %G <M0 "$: +M!0 'O :[H "$P!0 &C ?\H "%,!0 XP =T0 "%?!0 &WP =J( +M "%Q!0 $. =3H "& !0 "G =*H "&3!0 '%0 >?@ "&:!0 "* +M>,X "&U!0 Y >4@ "'0!0 !A0 >D "'F!0 !8 >FP "'\!0 +M2 >@P "(.!0 7 >J@ "(=!0 #00 ?9@ "(Q!0 &*0 ?%H ")' +M!0 (+P ?@0 ")B!0 #' ?18 ")V!0 &! >]0 "*,!0 %+ >UH +M "*@!0 %E >MX "*N!0 !. >Z8 "+!!0 #!@ >VX "+5!0 &*@ +M>R "+E!0 $_ >NX "+S!0 %O ?U ",$!0 (& BJ ",,!P ' +MY@ ",+ ",K!P #J "BAH "-,!P '8 "=D0 "-L!P (<@ ",) ".# +M!P %X "B6( ".<!P (? "=C@ ".T!P !M@ ""U8 "/%!P $R@ "=IP +M "/8!P #H@ "=BX "/J!P &S@ ""U0 "/_!P '[@ "=IH "06!P %- " +M=BP "0L!0 #X0 @+ "1$!0 &V C! "1+!P (EP "=@@ "1B!P & +M!0 "H=8 "1[!P P "=G8 "23!P !VP ",- "2D!P $[P "BM( "2W +M!P #QP "=E "3)!P &\P ",,X "3>!P ($P "BM "3U!P %60 "=DX +M "4+!0 'H@ C. "43!0 C>X "49!0 'N C5 "4A!0 +MC48 "4I!0 #;@ C?@ "4R!P %P@ "HH0 "4_!0 CJ8 "5'!P " +MF@ "H_ "51!0 " "58!P "JZP "5?"0 "LTP "5E +M+VQI8B]C<G0P+F\ +VQI8B]-8W)T,2YO &=D8FUE+F\ 9V-C,E]C;VUP:6QE +M9"X +V-Y9VEN="]P;&%Y+V9N9B]D979O+V=D8G1E<W0O=#$P+P!G9&)M92YC +M &EN=#IT,3UR,3LM,C$T-S0X,S8T.#LR,30W-#@S-C0W.P!C:&%R.G0R/7(R +M.S [,3(W.P!L;VYG(&EN=#IT,SUR,3LM,C$T-S0X,S8T.#LR,30W-#@S-C0W +M.P!U;G-I9VYE9"!I;G0Z=#0]<C$[,#LM,3L ;&]N9R!U;G-I9VYE9"!I;G0Z +M=#4]<C$[,#LM,3L <VAO<G0@:6YT.G0V/7(Q.RTS,C<V.#LS,C<V-SL ;&]N +M9R!L;VYG(&EN=#IT-SUR,3LP.RTQ.P!S:&]R="!U;G-I9VYE9"!I;G0Z=#@] +M<C$[,#LV-34S-3L ;&]N9R!L;VYG('5N<VEG;F5D(&EN=#IT.3UR,3LP.RTQ +M.P!S:6=N960@8VAA<CIT,3 ]<C$[+3$R.#LQ,C<[ '5N<VEG;F5D(&-H87(Z +M=#$Q/7(Q.S [,C4U.P!F;&]A=#IT,3(]<C$[-#LP.P!D;W5B;&4Z=#$S/7(Q +M.S@[,#L ;&]N9R!D;W5B;&4Z=#$T/7(Q.S@[,#L =F]I9#IT,34],34 =%]S +M=')U8W0Z5#$V/7,R-'9?8VAA<E]M96UB97(Z,BPP+#@[=E]S:&]R=%]M96UB +M97(Z-BPQ-BPQ-CM< '9?:6YT7VUE;6)E<CHQ+#,R+#,R.W9?;&]N9U]M96UB +M97(Z,RPV-"PS,CM< '9?9FQO871?;65M8F5R.C$R+#DV+#,R.W9?9&]U8FQE +M7VUE;6)E<CHQ,RPQ,C@L-C0[.P!T7W5N:6]N.E0Q-SUU.'9?8VAA<E]M96UB +M97(Z,BPP+#@[=E]S:&]R=%]M96UB97(Z-BPP+#$V.UP =E]I;G1?;65M8F5R +M.C$L,"PS,CMV7VQO;F=?;65M8F5R.C,L,"PS,CM< '9?9FQO871?;65M8F5R +M.C$R+# L,S([=E]D;W5B;&5?;65M8F5R.C$S+# L-C0[.P!V7V-H87)?9G5N +M8SI&,@!V7W-I9VYE9%]C:&%R7V9U;F,Z1C$P '9?=6YS:6=N961?8VAA<E]F +M=6YC.D8Q,0!V7W-H;W)T7V9U;F,Z1C8 =E]S:6=N961?<VAO<G1?9G5N8SI& +M-@!V7W5N<VEG;F5D7W-H;W)T7V9U;F,Z1C@ =E]I;G1?9G5N8SI&,0!V7W-I +M9VYE9%]I;G1?9G5N8SI&,0!V7W5N<VEG;F5D7VEN=%]F=6YC.D8T '9?;&]N +M9U]F=6YC.D8S '9?<VEG;F5D7VQO;F=?9G5N8SI&,P!V7W5N<VEG;F5D7VQO +M;F=?9G5N8SI&-0!V7V9L;V%T7V9U;F,Z1C$R '9?9&]U8FQE7V9U;F,Z1C$S +M &QI;FLZ5#$X/7,Q-3)N97AT.C$Y/2HQ."PP+#,R.VQI;FMF=6YC.C(P/2HR +M,3UF,3DL,S(L,S([7 !S='5F9CHR,CUA<C$[,#LP.S(S/6%R,3LP.S$[,C0] +M87(Q.S [,CLQ-BPV-"PQ,34R.SL ='5?;&EN:SI4,C4]=3$T-&YE>'0Z,3DL +M,"PS,CML:6YK9G5N8SHR,"PP+#,R.UP <W1U9F8Z,C(L,"PQ,34R.SL 8V]L +M;W)S.E0R-CUE>65L;&]W.C L<'5R<&QE.C$L<&EN:SHR+#L 8V%R<SI4,C<] +M96)M=SHP+'!O<G-C:&4Z,2P[ &)O;VQE86XZ=#(X/65&04Q313HP+%12544Z +M,2P[ &)V86QS.E0R.3UE9F%L<V4Z,"QT<G5E.C$L.P!B;V]L96%N,CIT,CD +M;6ES;W)D97)E9#I4,S ]971W;SHR+&]N93HQ+'IE<F\Z,"QT:')E93HS+#L +M;6%I;CI&,0!V7V-H87(Z1S( =E]S:6=N961?8VAA<CI',3 =E]U;G-I9VYE +M9%]C:&%R.D<Q,0!V7W-H;W)T.D<V '9?<VEG;F5D7W-H;W)T.D<V '9?=6YS +M:6=N961?<VAO<G0Z1S@ =E]I;G0Z1S$ =E]S:6=N961?:6YT.D<Q '9?=6YS +M:6=N961?:6YT.D<T '9?;&]N9SI',P!V7W-I9VYE9%]L;VYG.D<S '9?=6YS +M:6=N961?;&]N9SI'-0!V7V9L;V%T.D<Q,@!V7V1O=6)L93I',3, =E]C:&%R +M7V%R<F%Y.D<S,3UA<C$[,#LQ.S( =E]S:6=N961?8VAA<E]A<G)A>3I',S(] +M87(Q.S [,3LQ, !V7W5N<VEG;F5D7V-H87)?87)R87DZ1S,S/6%R,3LP.S$[ +M,3$ =E]S:&]R=%]A<G)A>3I',S0]87(Q.S [,3LV '9?<VEG;F5D7W-H;W)T +M7V%R<F%Y.D<S- !V7W5N<VEG;F5D7W-H;W)T7V%R<F%Y.D<S-3UA<C$[,#LQ +M.S@ =E]I;G1?87)R87DZ1S,V/6%R,3LP.S$[,0!V7W-I9VYE9%]I;G1?87)R +M87DZ1S,V '9?=6YS:6=N961?:6YT7V%R<F%Y.D<S-SUA<C$[,#LQ.S0 =E]L +M;VYG7V%R<F%Y.D<S.#UA<C$[,#LQ.S, =E]S:6=N961?;&]N9U]A<G)A>3I' +M,S@ =E]U;G-I9VYE9%]L;VYG7V%R<F%Y.D<S.3UA<C$[,#LQ.S4 =E]F;&]A +M=%]A<G)A>3I'-# ]87(Q.S [,3LQ,@!V7V1O=6)L95]A<G)A>3I'-#$]87(Q +M.S [,3LQ,P!V7V-H87)?<&]I;G1E<CI'-#(]*C( =E]S:6=N961?8VAA<E]P +M;VEN=&5R.D<T,STJ,3 =E]U;G-I9VYE9%]C:&%R7W!O:6YT97(Z1S0T/2HQ +M,0!V7W-H;W)T7W!O:6YT97(Z1S0U/2HV '9?<VEG;F5D7W-H;W)T7W!O:6YT +M97(Z1S0U '9?=6YS:6=N961?<VAO<G1?<&]I;G1E<CI'-#8]*C@ =E]I;G1? +M<&]I;G1E<CI'-#<]*C$ =E]S:6=N961?:6YT7W!O:6YT97(Z1S0W '9?=6YS +M:6=N961?:6YT7W!O:6YT97(Z1S0X/2HT '9?;&]N9U]P;VEN=&5R.D<T.3TJ +M,P!V7W-I9VYE9%]L;VYG7W!O:6YT97(Z1S0Y '9?=6YS:6=N961?;&]N9U]P +M;VEN=&5R.D<U,#TJ-0!V7V9L;V%T7W!O:6YT97(Z1S4Q/2HQ,@!V7V1O=6)L +M95]P;VEN=&5R.D<U,CTJ,3, =E]S=')U8W0Q.D<Q-@!V7W-T<G5C=#(Z1S4S +M/7,R-'9?8VAA<E]M96UB97(Z,BPP+#@[=E]S:&]R=%]M96UB97(Z-BPQ-BPQ +M-CM< '9?:6YT7VUE;6)E<CHQ+#,R+#,R.W9?;&]N9U]M96UB97(Z,RPV-"PS +M,CM< '9?9FQO871?;65M8F5R.C$R+#DV+#,R.W9?9&]U8FQE7VUE;6)E<CHQ +M,RPQ,C@L-C0[.P!V7W5N:6]N.D<Q-P!V7W5N:6]N,CI'-30]=3AV7V-H87)? +M;65M8F5R.C(L,"PX.W9?<VAO<G1?;65M8F5R.C8L,"PQ-CM< '9?:6YT7VUE +M;6)E<CHQ+# L,S([=E]L;VYG7VUE;6)E<CHS+# L,S([7 !V7V9L;V%T7VUE +M;6)E<CHQ,BPP+#,R.W9?9&]U8FQE7VUE;6)E<CHQ,RPP+#8T.SL <U]L:6YK +M.D<Q.0!U7VQI;FLZ1S(U '!R:6UA<GDZ1S4U/65R960Z,"QG<F5E;CHQ+&)L +M=64Z,BP[ &YO;G!R:6UA<GDZ1S(V &-L=6YK97(Z1S4V/65C:&5V>3HP+&9O +M<F0Z,2P[ '-P;W)T<V-A<CI',C< 7U]M86EN+F\ 9V-C,E]C;VUP:6QE9"X +M+W-E;F1A:2]A8F,O<FEC:"]L871E<W0O;V)J9&ER+7-U;C,O9V-C+P N+B\N +M+B]D979O+V=C8R]L:6)G8V,R+F, :6YT.G0Q/7(Q.RTR,30W-#@S-C0X.S(Q +M-#<T.#,V-#<[ &-H87(Z=#(]<C([,#LQ,C<[ &QO;F<@:6YT.G0S/7(Q.RTR +M,30W-#@S-C0X.S(Q-#<T.#,V-#<[ '5N<VEG;F5D(&EN=#IT-#UR,3LP.RTQ +M.P!L;VYG('5N<VEG;F5D(&EN=#IT-3UR,3LP.RTQ.P!S:&]R="!I;G0Z=#8] +M<C$[+3,R-S8X.S,R-S8W.P!L;VYG(&QO;F<@:6YT.G0W/7(Q.S [+3$[ '-H +M;W)T('5N<VEG;F5D(&EN=#IT.#UR,3LP.S8U-3,U.P!L;VYG(&QO;F<@=6YS +M:6=N960@:6YT.G0Y/7(Q.S [+3$[ '-I9VYE9"!C:&%R.G0Q,#UR,3LM,3(X +M.S$R-SL =6YS:6=N960@8VAA<CIT,3$]<C$[,#LR-34[ &9L;V%T.G0Q,CUR +M,3LT.S [ &1O=6)L93IT,3,]<C$[.#LP.P!L;VYG(&1O=6)L93IT,30]<C$[ +M.#LP.P!V;VED.G0Q-3TQ-0!R96=?8VQA<W,Z5#$V/65.3U]214=3.C L3$]? +M1E!!7U)%1U,Z,2Q&4$%?4D5'4SHR+$907U)%1U,Z,RQ< $907T]27T9005]2 +M14=3.C0L1$%405]214=3.C4L1$%405]/4E]&4$%?4D5'4SHV+$1!5$%?3U)? +M1E!?4D5'4SHW+%P 1$%405]/4E]&4%]/4E]&4$%?4D5'4SHX+$%$1%)?4D5' +M4SHY+$=%3D5204Q?4D5'4SHQ,"Q'14Y%4D%,7T]27T9005]214=3.C$Q+%P +M1T5.15)!3%]/4E]&4%]214=3.C$R+$%,3%]214=3.C$S+$Q)35]214=?0TQ! +M4U-%4SHQ-"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 %]I;FET:6%L:7IE9"XP +M %]?;6%I;CI&,34 7V5X:70N;P!G8V,R7V-O;7!I;&5D+@ O<V5N9&%I+V%B +M8R]R:6-H+VQA=&5S="]O8FID:7(M<W5N,R]G8V,O "XN+RXN+V1E=F\O9V-C +M+VQI8F=C8S(N8P!I;G0Z=#$]<C$[+3(Q-#<T.#,V-#@[,C$T-S0X,S8T-SL +M8VAA<CIT,CUR,CLP.S$R-SL ;&]N9R!I;G0Z=#,]<C$[+3(Q-#<T.#,V-#@[ +M,C$T-S0X,S8T-SL =6YS:6=N960@:6YT.G0T/7(Q.S [+3$[ &QO;F<@=6YS +M:6=N960@:6YT.G0U/7(Q.S [+3$[ '-H;W)T(&EN=#IT-CUR,3LM,S(W-C@[ +M,S(W-C<[ &QO;F<@;&]N9R!I;G0Z=#<]<C$[,#LM,3L <VAO<G0@=6YS:6=N +M960@:6YT.G0X/7(Q.S [-C4U,S4[ &QO;F<@;&]N9R!U;G-I9VYE9"!I;G0Z +M=#D]<C$[,#LM,3L <VEG;F5D(&-H87(Z=#$P/7(Q.RTQ,C@[,3(W.P!U;G-I +M9VYE9"!C:&%R.G0Q,3UR,3LP.S(U-3L 9FQO870Z=#$R/7(Q.S0[,#L 9&]U +M8FQE.G0Q,SUR,3LX.S [ &QO;F<@9&]U8FQE.G0Q-#UR,3LX.S [ '9O:60Z +M=#$U/3$U ')E9U]C;&%S<SI4,38]94Y/7U)%1U,Z,"Q,3U]&4$%?4D5'4SHQ +M+$9005]214=3.C(L1E!?4D5'4SHS+%P 1E!?3U)?1E!!7U)%1U,Z-"Q$051! +M7U)%1U,Z-2Q$051!7T]27T9005]214=3.C8L1$%405]/4E]&4%]214=3.C<L +M7 !$051!7T]27T907T]27T9005]214=3.C@L041$4E]214=3.CDL1T5.15)! +M3%]214=3.C$P+$=%3D5204Q?3U)?1E!!7U)%1U,Z,3$L7 !'14Y%4D%,7T]2 +M7T907U)%1U,Z,3(L04Q,7U)%1U,Z,3,L3$E-7U)%1U]#3$%34T53.C$T+#L +M<'1R9&EF9E]T.G0Q '-I>F5?=#IT,0!W8VAA<E]T.G0X &QO;F=L;VYG.E0Q +M-SUS.&AI9V@Z,RPP+#,R.VQO=SHS+#,R+#,R.SL ;&]N9U]L;VYG.G0Q.#UU +M.',Z,3<L,"PV-#ML;#HW+# L-C0[.P!F=6YC7W!T<CIT,3D]*C(P/68Q-0!? +M97AI=%]D=6UM>5]D96-L.D<Q %]?0U1/4E],25-47U\Z1S(Q/6%R,3LP.S$[ +M,3D 7U]$5$]27TQ)4U1?7SI',C$ +6QG &QI8F<N<P!-<W=I=&-H+F\ 97AI +M="YO &]N7V5X:70N;P!W<FET92YO &5R<@!?97AI="YO &-E<G)O<BYO &5R +M<FYO+F\ 9FQS8G5F+F\ 9FQO871?<W=I=&-H+F\ 36EN:70N;P!F<%]G;&]B +M86QS+F\ ;6EN:71F<"YO &UA;&QO8RYO &ES871T>2YO &9I;F1I;W N;P!I +M;V(N;P!S:6=V96,N;P!C;&]S92YO &5R<@!F<W1A="YO &5R<@!G971D=&%B +M;&5S:7IE+F\ 97)R &=E='!A9V5S:7IE+F\ 97)R &EO8W1L+F\ 97)R '-I +M9V)L;V-K+F\ 97)R '-I9W-E=&UA<VLN;P!E<G( <V)R:RYO '-I9W1R86UP +M+F\ 7W-I9W9E8RYO &9P<FEN=&8N;P!-9&5F875L="YO &UA.3-N+F\ 9G!? +M<V%V92YO &)C;W!Y+F\ 8V%L;&]C+F\ 9&]P<FYT+F\ 9G!?8V]M;6]N<RYO +M &)Z97)O+F\ ;65M<V5T+F\ <W1R;&5N+F\ 871O:2YO &-T>7!E7RYO &UE +M;6-H<BYO '-E=&QO8V%L92YO '-T<F-H<BYO '-T<F-M<"YO '-T<G-P;BYO +M '-T<G1O:RYO &5C;VYV97)T+F\ 9V-O;G9E<G0N;P!D;W5B;&5?9&5C:6TN +M;P!?=6YP86-K7V1B;&4N;P!?8F%S95]3+F\ 7V)A<V5?:6PN;P!?<W!R:6YT +M9E]S=7 N;P!?=&EM97-?<&]W97(N;P!Q96-O;G9E<G0N;P!R96%D+F\ 97)R +M '!R:6YT9BYO '-P<FEN=&8N;P!O<&5N+F\ 97)R &UE;6-P>2YO '-T<F-A +M="YO '-T<F-P>2YO &%B;W)T+F\ 9V5T96YV+F\ <&5R<F]R+F\ <W1R<&)R +M:RYO %]B:6=?<&]W97(N;P!?<VUA;&Q?<&]W97(N;P!G971P:60N;P!E<G( +M<VEG;F%L+F\ :VEL;"YO &5R<@!?<&5R<F]R+F\ 97)R;'-T+F\ =W)I=&5V +M+F\ 97)R "UL9P!L:6)G+G, 7V5X:70 7U]$64Y!34E# '-T87)T %]M86EN +M '-T87)T7V9L;V%T %]?97AI= !?96YV:7)O;@!-<W=I=&-H &8V.#@X,5]U +M<V5D %]V7V-H87)?9G5N8P!?=E]S:6=N961?8VAA<E]F=6YC %]V7W5N<VEG +M;F5D7V-H87)?9G5N8P!?=E]S:&]R=%]F=6YC %]V7W-I9VYE9%]S:&]R=%]F +M=6YC %]V7W5N<VEG;F5D7W-H;W)T7V9U;F, 7W9?:6YT7V9U;F, 7W9?<VEG +M;F5D7VEN=%]F=6YC %]V7W5N<VEG;F5D7VEN=%]F=6YC %]V7VQO;F=?9G5N +M8P!?=E]S:6=N961?;&]N9U]F=6YC %]V7W5N<VEG;F5D7VQO;F=?9G5N8P!? +M=E]F;&]A=%]F=6YC %]V7V1O=6)L95]F=6YC %]?7VUA:6X 7W9?8VAA<@!? +M=E]S:6=N961?8VAA<@!?=E]U;G-I9VYE9%]C:&%R %]V7W-H;W)T %]V7W-I +M9VYE9%]S:&]R= !?=E]U;G-I9VYE9%]S:&]R= !?=E]I;G0 7W9?<VEG;F5D +M7VEN= !?=E]U;G-I9VYE9%]I;G0 7W9?;&]N9P!?=E]S:6=N961?;&]N9P!? +M=E]U;G-I9VYE9%]L;VYG %]V7V9L;V%T %]V7V1O=6)L90!?=E]C:&%R7V%R +M<F%Y %]V7W-I9VYE9%]C:&%R7V%R<F%Y %]V7W5N<VEG;F5D7V-H87)?87)R +M87D 7W9?<VAO<G1?87)R87D 7W9?<VEG;F5D7W-H;W)T7V%R<F%Y %]V7W5N +M<VEG;F5D7W-H;W)T7V%R<F%Y %]V7VEN=%]A<G)A>0!?=E]S:6=N961?:6YT +M7V%R<F%Y %]V7W5N<VEG;F5D7VEN=%]A<G)A>0!?=E]L;VYG7V%R<F%Y %]V +M7W-I9VYE9%]L;VYG7V%R<F%Y %]V7W5N<VEG;F5D7VQO;F=?87)R87D 7W9? +M9FQO871?87)R87D 7W9?9&]U8FQE7V%R<F%Y %]V7V-H87)?<&]I;G1E<@!? +M=E]S:6=N961?8VAA<E]P;VEN=&5R %]V7W5N<VEG;F5D7V-H87)?<&]I;G1E +M<@!?=E]S:&]R=%]P;VEN=&5R %]V7W-I9VYE9%]S:&]R=%]P;VEN=&5R %]V +M7W5N<VEG;F5D7W-H;W)T7W!O:6YT97( 7W9?:6YT7W!O:6YT97( 7W9?<VEG +M;F5D7VEN=%]P;VEN=&5R %]V7W5N<VEG;F5D7VEN=%]P;VEN=&5R %]V7VQO +M;F=?<&]I;G1E<@!?=E]S:6=N961?;&]N9U]P;VEN=&5R %]V7W5N<VEG;F5D +M7VQO;F=?<&]I;G1E<@!?=E]F;&]A=%]P;VEN=&5R %]V7V1O=6)L95]P;VEN +M=&5R %]P<FEM87)Y %]N;VYP<FEM87)Y %]S<&]R='-C87( 7V-L=6YK97( +M7W-?;&EN:P!?=5]L:6YK %]V7W5N:6]N %]V7W5N:6]N,@!?=E]S=')U8W0Q +M %]V7W-T<G5C=#( 7U]?9&]?9VQO8F%L7V1T;W)S %]?7T143U)?3$E35%]? +M %]?97AI=%]D=6UM>5]R968 7U]E>&ET7V1U;6UY7V1E8VP 7U]?9&]?9VQO +M8F%L7V-T;W)S %]?7T-43U)?3$E35%]? %]O;E]E>&ET %]W<FET90!?;7-W +M:71C:&9P7P!-:6YI= !F;&]A=%]S=VET8V@ 7U]C;&5A;G5P %]?97AI=%]H +M86YD;&5R<P!?;6%L;&]C &-E<G)O<@!?97)R;F\ 7U]W<G1C:&L 7U]F;'-B +M=68 7V9R964 7U]S;6)U9@!?9F9L=7-H %]?9FEN9&)U9@!?7WAF;'-B=68 +M7V9S=&%T %]?8G5F<WEN8P!?8VQO<V4 7VES871T>0!?9F-L;W-E %]?9G=A +M;&L 5FQI<W0 7V9P7W-W:71C: !?;6EN:71F<%\ 7V9P7W-T871E7VUC-C@X +M.#$ 7T9M;V1E %]&<W1A='5S %]F<%]S=&%T95]S=6YF<&$ 7V9P7W-T871E +M7W-K>69F< !?9G!?<W1A=&5?<V]F='=A<F4 7W-I9W9E8P!?14U44W!E8VEA +M; !?9G!R:6YT9@!?;6$Y,VY? %]-9&5F875L= !?14U44VEG;F%L;&5D %]? +M:6]B %]R96%L;&]C %]S8G)K %]G971P86=E<VEZ90!?8F-O<'D 7U]U8F]U +M;F0 7U]?;6%L;&EN9F\ 7U]R;V]T %]?;&)O=6YD %]I;V-T; !?7V9I;F1I +M;W 7V=E=&1T86)L97-I>F4 7U]F7VUO<F5F:6QE<P!?9E]P<F5A;&QO8P!? +M8V%L;&]C %]?<VEG9G5N8P!?<VEG<V5T;6%S:P!?7W-I9W1R86UP %]?<VEG +M=F5C %]S:6=B;&]C:P!?96YD &-U<F)R:P!F<%]S879E &9P7W)E<W1O<F4 +M7U]D;W!R;G0 7U]S:WE?9F0 7U]S:WEB87-E %]B>F5R;P!?8V9R964 7V%T +M;VD 7W-T<G-P;@!?7V-T>7!E7P!?;65M8VAR %]M96US970 7W%F8V]N=F5R +M= !?9F-O;G9E<G0 7W-T<F-H<@!?;&]C86QE8V]N=@!?7VUK87)G;'-T %]S +M=')L96X 7U]F;W5R9&EG:71S<75I8VL 7W%G8V]N=F5R= !?9V-O;G9E<G0 +M7W%E8V]N=F5R= !?96-O;G9E<G0 7U]G971A<F< 7U]F<&%B87-E %]I<W!U +M;F-T %]I<V=R87!H %]I<V%S8VEI %]T;V%S8VEI %]?;6)?8W5R7VUA> !? +M:7-X9&EG:70 7VES<W!A8V4 7VES86QN=6T 7VES=7!P97( 7VES8VYT<FP +M7VES<')I;G0 7VES86QP:&$ 7VES9&EG:70 7VES;&]W97( 7W)E860 7VQC +M;VYV %]G971L;V-A;&5?8W1Y<&4 7U]L86YG:6YF;P!?;&]C86QD=&-O;G8 +M7W-T<F-A= !?7VUY7W1I;64 7W-E=&QO8V%L90!?<W1R=&]K %]I;FET7W-T +M871I8W, 7V=E=&QO8V%L95]N=6UE<FEC %]M96UC<'D 7U]L;V-A;&5S %]S +M=')C;7 7V]P96X 7V]P96YL;V-A;&4 7W-T<F-P>0!?7V-O9&5?<V5T7VEN +M9F\ 7U]C='EP95]U; !?9V5T96YV %]?9'1C;VYV %]S=')P8G)K %]F<%]D +M:7)E8W1I;VX 7U]F<%]C=7)R96YT7V1I<F5C=&EO;@!?7V9P7V-U<G)E;G1? +M97AC97!T:6]N<P!?7V9P7V-U<G)E;G1?<')E8VES:6]N %]D;W5B;&5?=&]? +M9&5C:6UA; !?9V-V= !?7V=C=G0 7V)I;F%R>5]T;U]D96-I;6%L7VEN=&5G +M97( 7U]R:6=H=%]S:&EF=%]B87-E7W1W;P!?9&5C:6UA;%]R;W5N9 !?7V)I +M9U]F;&]A=%]T:6UE<U]P;W=E<@!?8FEN87)Y7W1O7V1E8VEM86Q?9G)A8W1I +M;VX 7U]F<%]N;W)M86QI>F4 7W-P<FEN=&8 7U]F<F5E7V)I9U]F;&]A= !? +M7W5N<&%C:V5D7W1O7V)I9U]F;&]A= !?7V)A<V5?8V]N=F5R<VEO;E]A8F]R +M= !?7W5N<&%C:U]D;W5B;&4 7U]C;&%S<U]D;W5B;&4 7W%U861R=7!L95]T +M;U]D96-I;6%L %]?=6YP86-K961?=&]?9&5C:6UA; !?7V)I9U]B:6YA<GE? +M=&]?8FEG7V1E8VEM86P 7U]U;G!A8VM?<75A9')U<&QE %]?8VQA<W-?<75A +M9')U<&QE %]?9G!?;&5F='-H:69T %]?9G!?<V5T7V5X8V5P=&EO;@!?7W5M +M86, 7U]M=6QT:7!L>5]B87-E7W1W;U]V96-T;W( 7U]M=6QT:7!L>5]B87-E +M7W1E;E]V96-T;W( 7U]C87)R>5]P<F]P86=A=&5?='=O %]?8V%R<GE?<')O +M<&%G871E7W1E;@!?7V-A<G)Y7VEN7V(Q,# P, !?7W!R;V1C7V(Q,# P, !? +M7VUU;'1I<&QY7V)A<V5?='=O %]?;&5F=%]S:&EF=%]B87-E7W1W;P!?7VUU +M;'1I<&QY7V)A<V5?=&5N7V)Y7W1W;P!?7VUU;'1I<&QY7V)A<V5?=&5N %]? +M;&5F=%]S:&EF=%]B87-E7W1E;@!?7W!R;V1?,3 P,#!?8C8U-3,V %]?<')O +M9%]B-C4U,S8 7U]C87)R>5]O=71?8C$P,# P %]?<')O9%\V-34S-E]B,3 P +M,# 7U]L<VAI9G1?8C$P,# P %]?<')O9%]B,3 P,# 7U]M=6Q?-C4U,S9S +M:&]R= !?<')I;G1F %]?;&5A9&EN9U]Z97)O<U]B:6=?<&]W97)S7W1E;@!? +M7VQE861I;F=?>F5R;W-?<VUA;&Q?<&]W97)S7W1E;@!?7VQE861I;F=?>F5R +M;W-?=&EN>5]P;W=E<G-?=&5N %]?<W1A<G1?8FEG7W!O=V5R<U]T96X 7U]S +M=&%R=%]S;6%L;%]P;W=E<G-?=&5N %]?<W1A<G1?=&EN>5]P;W=E<G-?=&5N +M %]?8FEG7W!O=V5R<U]T96X 7U]S;6%L;%]P;W=E<G-?=&5N %]?=&EN>5]P +M;W=E<G-?=&5N %]?;6%X7V)I9U]P;W=E<G-?=&5N %]?;6%X7W-M86QL7W!O +M=V5R<U]T96X 7U]M87A?=&EN>5]P;W=E<G-?=&5N %]?8V]P>5]B:6=?9FQO +M871?9&EG:71S %]A8F]R= !?7W-T87)T7V)I9U]P;W=E<G-?='=O %]?<W1A +M<G1?<VUA;&Q?<&]W97)S7W1W;P!?7W-T87)T7W1I;GE?<&]W97)S7W1W;P!? +M7V)I9U]P;W=E<G-?='=O %]?<VUA;&Q?<&]W97)S7W1W;P!?7W1I;GE?<&]W +M97)S7W1W;P!?7VUA>%]B:6=?<&]W97)S7W1W;P!?7VUA>%]S;6%L;%]P;W=E +M<G-?='=O %]?;6%X7W1I;GE?<&]W97)S7W1W;P!?<&5R<F]R %]K:6QL %]S +M:6=N86P 7V=E='!I9 !?7W!E<G)O<@!?<WES7V5R<FQI<W0 7W=R:71E=@!? +=<WES7VYE<G( 7V5T97AT %]E9&%T80!?7V5N9 !R + +end diff --git a/gdb/testsuite/gdb.base/m68k-elf.u b/gdb/testsuite/gdb.base/m68k-elf.u new file mode 100644 index 0000000..e3d05e7 --- /dev/null +++ b/gdb/testsuite/gdb.base/m68k-elf.u @@ -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 diff --git a/gdb/testsuite/gdb.base/mips-ecoff.u b/gdb/testsuite/gdb.base/mips-ecoff.u new file mode 100644 index 0000000..69f656a --- /dev/null +++ b/gdb/testsuite/gdb.base/mips-ecoff.u @@ -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 diff --git a/gdb/testsuite/gdb.base/mips_pro.c b/gdb/testsuite/gdb.base/mips_pro.c new file mode 100644 index 0000000..cef975d --- /dev/null +++ b/gdb/testsuite/gdb.base/mips_pro.c @@ -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); +} diff --git a/gdb/testsuite/gdb.base/nodebug.c b/gdb/testsuite/gdb.base/nodebug.c new file mode 100644 index 0000000..5428e66 --- /dev/null +++ b/gdb/testsuite/gdb.base/nodebug.c @@ -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); +} diff --git a/gdb/testsuite/gdb.base/opaque-info.c b/gdb/testsuite/gdb.base/opaque-info.c new file mode 100644 index 0000000..f0317d2 --- /dev/null +++ b/gdb/testsuite/gdb.base/opaque-info.c @@ -0,0 +1,5 @@ +#if defined (__GNUC__) +set gcc_compiled __GNUC__ +#else +set gcc_compiled 0 +#endif diff --git a/gdb/testsuite/gdb.base/opaque.exp b/gdb/testsuite/gdb.base/opaque.exp new file mode 100644 index 0000000..544023d --- /dev/null +++ b/gdb/testsuite/gdb.base/opaque.exp @@ -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 +} diff --git a/gdb/testsuite/gdb.base/opaque0.c b/gdb/testsuite/gdb.base/opaque0.c new file mode 100644 index 0000000..e5a343c --- /dev/null +++ b/gdb/testsuite/gdb.base/opaque0.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/opaque1.c b/gdb/testsuite/gdb.base/opaque1.c new file mode 100644 index 0000000..4a3c855 --- /dev/null +++ b/gdb/testsuite/gdb.base/opaque1.c @@ -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 +{ +} diff --git a/gdb/testsuite/gdb.base/printcmds.c b/gdb/testsuite/gdb.base/printcmds.c new file mode 100644 index 0000000..79ba4d2 --- /dev/null +++ b/gdb/testsuite/gdb.base/printcmds.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp new file mode 100644 index 0000000..9993888 --- /dev/null +++ b/gdb/testsuite/gdb.base/printcmds.exp @@ -0,0 +1,1523 @@ +# 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 "printcmds" +set srcfile $binfile.c + +if ![file exists $objdir/$subdir/$binfile] then { + perror "$objdir/$subdir/$binfile does not exist" + continue +} + +# Set the current language to C. This counts as a test. If it +# fails, then we skip the other tests. + +proc set_lang_c {} { + global prompt + + send "set language c\n" + expect { + -re ".*$prompt $" {} + timeout { fail "set language c (timeout)" ; return 0 } + } + + send "show language\n" + expect { + -re ".* source language is \"c\".*$prompt $" { + pass "set language to \"c\"" + return 1 + } + -re ".*$prompt $" { + fail "setting language to \"c\"" + return 0 + } + timeout { + fail "can't show language (timeout)" + return 0 + } + } +} + +# Testing printing of a specific value. Increment passcount for +# success or issue fail message for failure. In both cases, return +# a 1 to indicate that more tests can proceed. However a timeout +# is a serious error, generates a special fail message, and causes +# a 0 to be returned to indicate that more tests are likely to fail +# as well. + +proc prt_accept { sendthis expectthis } { + global prompt + global passcount + global xfail_flag + + send "$sendthis\n" + expect { + -re ".* = $expectthis\r\n$prompt $" { + if $xfail_flag then { pass "$sendthis" } + incr passcount + return 1 + } + -re ".*$prompt $" { + fail "$sendthis" + return 1 + } + timeout { + fail "$sendthis (timeout)" + return 0 + } + } +} + +proc test_integer_literals_accepted {} { + global prompt + global passcount + + set passcount 0 + + # Test various decimal values. + + prt_accept "p 123" "123" + prt_accept "p -123" "-123" + prt_accept "p/d 123" "123" + + # Test various octal values. + + prt_accept "p 0123" "83" + prt_accept "p 00123" "83" + prt_accept "p -0123" "-83" + prt_accept "p/o 0123" "0123" + + # Test various hexadecimal values. + + prt_accept "p 0x123" "291" + prt_accept "p -0x123" "-291" + prt_accept "p 0x0123" "291" + prt_accept "p -0x0123" "-291" + prt_accept "p 0xABCDEF" "11259375" + prt_accept "p 0xabcdef" "11259375" + prt_accept "p 0xAbCdEf" "11259375" + prt_accept "p/x 0x123" "0x123" + + if $passcount then { + pass "$passcount correct integer literals printed" + } +} + +proc test_character_literals_accepted {} { + global prompt + global passcount + + set passcount 0 + + prt_accept "p 'a'" "97 'a'" + prt_accept "p/c 'a'" "97 'a'" + prt_accept "p/x 'a'" "0x61" + prt_accept "p/d 'a'" "97" + prt_accept "p/t 'a'" "1100001" + prt_accept "p '\\141'" "97 'a'" + prt_accept "p/x '\\377'" "0xff" + # Note "p '\''" => "= 39 '\''" + prt_accept "p '''" "39 '\[\\'\]+'" + # Note "p '\\'" => "= 92 '\\'" + prt_accept "p '\\\\'" "92 '\\\\\\\\'" + + if $passcount then { + pass "$passcount correct character literals printed" + } +} + +# Testing printing of a specific value. Increment passcount for +# success or issue fail message for failure. In both cases, return +# a 1 to indicate that more tests can proceed. However a timeout +# is a serious error, generates a special fail message, and causes +# a 0 to be returned to indicate that more tests are likely to fail +# as well. +# +# Note we aren't too selective about what sort of error is printed, +# just that *some* error is printed. + +proc prt_reject { sendthis } { + global prompt + global passcount + + send "$sendthis\n" + expect { + -re ".*Invalid syntax in expression.*$prompt $" { + incr passcount + return 1 + } + -re ".*Junk after end of expression.*$prompt $" { + incr passcount + return 1 + } + -re ".*Invalid number.*$prompt $" { + incr passcount + return 1 + } + -re ".*Invalid character constant.*$prompt $" { + incr passcount + return 1 + } + -re ".*No symbol table is loaded.*$prompt $" { + incr passcount + return 1 + } + -re ".*No symbol .* in current context.*$prompt $" { + incr passcount + return 1 + } + -re ".*$prompt $" { + fail "$sendthis not properly rejected" + return 1 + } + timeout { + fail "$sendthis (timeout)" + return 0 + } + } +} + +proc test_integer_literals_rejected {} { + global prompt + global passcount + + set passcount 0 + + prt_reject "p 0x" + prt_reject "p ''" + prt_reject "p '\'" + + # Note that this turns into "p '\\\'" at gdb's input. + prt_reject "p '\\\\\\'" + + # Test various decimal values. + + prt_reject "p DEADBEEF" + + # Gdb currently fails this test for all configurations. The C + # lexer thinks that 123DEADBEEF is a floating point number, but + # then fails to notice that atof() only eats the 123 part. + # FIXME: This should be put into PRMS. + + setup_xfail "*-*-*" + prt_reject "p 123DEADBEEF" + + # Test various octal values. + + prt_reject "p 09" + prt_reject "p 079" + + # Test various hexadecimal values. + + prt_reject "p 0xG" + prt_reject "p 0xAG" + + if $passcount then { + pass "$passcount incorrect integer literals rejected" + } +} + +proc test_print_all_chars {} { + global prompt + global passcount + + set passcount 0 + + prt_accept "p ctable1\[0\]" "0 '\\\\000'" + prt_accept "p ctable1\[1\]" "1 '\\\\001'" + prt_accept "p ctable1\[2\]" "2 '\\\\002'" + prt_accept "p ctable1\[3\]" "3 '\\\\003'" + prt_accept "p ctable1\[4\]" "4 '\\\\004'" + prt_accept "p ctable1\[5\]" "5 '\\\\005'" + prt_accept "p ctable1\[6\]" "6 '\\\\006'" + prt_accept "p ctable1\[7\]" "7 '\\\\a'" + prt_accept "p ctable1\[8\]" "8 '\\\\b'" + prt_accept "p ctable1\[9\]" "9 '\\\\t'" + prt_accept "p ctable1\[10\]" "10 '\\\\n'" + prt_accept "p ctable1\[11\]" "11 '\\\\013'" + prt_accept "p ctable1\[12\]" "12 '\\\\f'" + prt_accept "p ctable1\[13\]" "13 '\\\\r'" + prt_accept "p ctable1\[14\]" "14 '\\\\016'" + prt_accept "p ctable1\[15\]" "15 '\\\\017'" + prt_accept "p ctable1\[16\]" "16 '\\\\020'" + prt_accept "p ctable1\[17\]" "17 '\\\\021'" + prt_accept "p ctable1\[18\]" "18 '\\\\022'" + prt_accept "p ctable1\[19\]" "19 '\\\\023'" + prt_accept "p ctable1\[20\]" "20 '\\\\024'" + prt_accept "p ctable1\[21\]" "21 '\\\\025'" + prt_accept "p ctable1\[22\]" "22 '\\\\026'" + prt_accept "p ctable1\[23\]" "23 '\\\\027'" + prt_accept "p ctable1\[24\]" "24 '\\\\030'" + prt_accept "p ctable1\[25\]" "25 '\\\\031'" + prt_accept "p ctable1\[26\]" "26 '\\\\032'" + prt_accept "p ctable1\[27\]" "27 '\\\\e'" + prt_accept "p ctable1\[28\]" "28 '\\\\034'" + prt_accept "p ctable1\[29\]" "29 '\\\\035'" + prt_accept "p ctable1\[30\]" "30 '\\\\036'" + prt_accept "p ctable1\[31\]" "31 '\\\\037'" + prt_accept "p ctable1\[32\]" "32 ' '" + prt_accept "p ctable1\[33\]" "33 '!'" + prt_accept "p ctable1\[34\]" "34 '\"'" + prt_accept "p ctable1\[35\]" "35 '#'" + prt_accept "p ctable1\[36\]" "36 '\\\$'" + prt_accept "p ctable1\[37\]" "37 '%'" + prt_accept "p ctable1\[38\]" "38 '&'" + prt_accept "p ctable1\[39\]" "39 '\\\\''" + prt_accept "p ctable1\[40\]" "40 '\[(\]+'" + prt_accept "p ctable1\[41\]" "41 '\[)\]+'" + prt_accept "p ctable1\[42\]" "42 '\[*\]+'" + prt_accept "p ctable1\[43\]" "43 '\[+\]+'" + prt_accept "p ctable1\[44\]" "44 ','" + prt_accept "p ctable1\[45\]" "45 '-'" + prt_accept "p ctable1\[46\]" "46 '.'" + prt_accept "p ctable1\[47\]" "47 '/'" + prt_accept "p ctable1\[48\]" "48 '0'" + prt_accept "p ctable1\[49\]" "49 '1'" + prt_accept "p ctable1\[50\]" "50 '2'" + prt_accept "p ctable1\[51\]" "51 '3'" + prt_accept "p ctable1\[52\]" "52 '4'" + prt_accept "p ctable1\[53\]" "53 '5'" + prt_accept "p ctable1\[54\]" "54 '6'" + prt_accept "p ctable1\[55\]" "55 '7'" + prt_accept "p ctable1\[56\]" "56 '8'" + prt_accept "p ctable1\[57\]" "57 '9'" + prt_accept "p ctable1\[58\]" "58 ':'" + prt_accept "p ctable1\[59\]" "59 ';'" + prt_accept "p ctable1\[60\]" "60 '<'" + prt_accept "p ctable1\[61\]" "61 '='" + prt_accept "p ctable1\[62\]" "62 '>'" + prt_accept "p ctable1\[63\]" "63 '\\?'" + prt_accept "p ctable1\[64\]" "64 '@'" + prt_accept "p ctable1\[65\]" "65 'A'" + prt_accept "p ctable1\[66\]" "66 'B'" + prt_accept "p ctable1\[67\]" "67 'C'" + prt_accept "p ctable1\[68\]" "68 'D'" + prt_accept "p ctable1\[69\]" "69 'E'" + prt_accept "p ctable1\[70\]" "70 'F'" + prt_accept "p ctable1\[71\]" "71 'G'" + prt_accept "p ctable1\[72\]" "72 'H'" + prt_accept "p ctable1\[73\]" "73 'I'" + prt_accept "p ctable1\[74\]" "74 'J'" + prt_accept "p ctable1\[75\]" "75 'K'" + prt_accept "p ctable1\[76\]" "76 'L'" + prt_accept "p ctable1\[77\]" "77 'M'" + prt_accept "p ctable1\[78\]" "78 'N'" + prt_accept "p ctable1\[79\]" "79 'O'" + prt_accept "p ctable1\[80\]" "80 'P'" + prt_accept "p ctable1\[81\]" "81 'Q'" + prt_accept "p ctable1\[82\]" "82 'R'" + prt_accept "p ctable1\[83\]" "83 'S'" + prt_accept "p ctable1\[84\]" "84 'T'" + prt_accept "p ctable1\[85\]" "85 'U'" + prt_accept "p ctable1\[86\]" "86 'V'" + prt_accept "p ctable1\[87\]" "87 'W'" + prt_accept "p ctable1\[88\]" "88 'X'" + prt_accept "p ctable1\[89\]" "89 'Y'" + prt_accept "p ctable1\[90\]" "90 'Z'" + prt_accept "p ctable1\[91\]" "91 '\\\['" + prt_accept "p ctable1\[92\]" "92 '\\\\\\\\'" + prt_accept "p ctable1\[93\]" "93 '\\\]'" + prt_accept "p ctable1\[94\]" "94 '\\^'" + prt_accept "p ctable1\[95\]" "95 '_'" + prt_accept "p ctable1\[96\]" "96 '`'" + prt_accept "p ctable1\[97\]" "97 'a'" + prt_accept "p ctable1\[98\]" "98 'b'" + prt_accept "p ctable1\[99\]" "99 'c'" + prt_accept "p ctable1\[100\]" "100 'd'" + prt_accept "p ctable1\[101\]" "101 'e'" + prt_accept "p ctable1\[102\]" "102 'f'" + prt_accept "p ctable1\[103\]" "103 'g'" + prt_accept "p ctable1\[104\]" "104 'h'" + prt_accept "p ctable1\[105\]" "105 'i'" + prt_accept "p ctable1\[106\]" "106 'j'" + prt_accept "p ctable1\[107\]" "107 'k'" + prt_accept "p ctable1\[108\]" "108 'l'" + prt_accept "p ctable1\[109\]" "109 'm'" + prt_accept "p ctable1\[110\]" "110 'n'" + prt_accept "p ctable1\[111\]" "111 'o'" + prt_accept "p ctable1\[112\]" "112 'p'" + prt_accept "p ctable1\[113\]" "113 'q'" + prt_accept "p ctable1\[114\]" "114 'r'" + prt_accept "p ctable1\[115\]" "115 's'" + prt_accept "p ctable1\[116\]" "116 't'" + prt_accept "p ctable1\[117\]" "117 'u'" + prt_accept "p ctable1\[118\]" "118 'v'" + prt_accept "p ctable1\[119\]" "119 'w'" + prt_accept "p ctable1\[120\]" "120 'x'" + prt_accept "p ctable1\[121\]" "121 'y'" + prt_accept "p ctable1\[122\]" "122 'z'" + prt_accept "p ctable1\[123\]" "123 '\[{\]+'" + prt_accept "p ctable1\[124\]" "124 '\[|\]+'" + prt_accept "p ctable1\[125\]" "125 '\[}\]+'" + prt_accept "p ctable1\[126\]" "126 '\[~\]'" + prt_accept "p ctable1\[127\]" "127 '\\\\177'" + prt_accept "p ctable1\[128\]" "128 '\\\\200'" + prt_accept "p ctable1\[129\]" "129 '\\\\201'" + prt_accept "p ctable1\[130\]" "130 '\\\\202'" + prt_accept "p ctable1\[131\]" "131 '\\\\203'" + prt_accept "p ctable1\[132\]" "132 '\\\\204'" + prt_accept "p ctable1\[133\]" "133 '\\\\205'" + prt_accept "p ctable1\[134\]" "134 '\\\\206'" + prt_accept "p ctable1\[135\]" "135 '\\\\207'" + prt_accept "p ctable1\[136\]" "136 '\\\\210'" + prt_accept "p ctable1\[137\]" "137 '\\\\211'" + prt_accept "p ctable1\[138\]" "138 '\\\\212'" + prt_accept "p ctable1\[139\]" "139 '\\\\213'" + prt_accept "p ctable1\[140\]" "140 '\\\\214'" + prt_accept "p ctable1\[141\]" "141 '\\\\215'" + prt_accept "p ctable1\[142\]" "142 '\\\\216'" + prt_accept "p ctable1\[143\]" "143 '\\\\217'" + prt_accept "p ctable1\[144\]" "144 '\\\\220'" + prt_accept "p ctable1\[145\]" "145 '\\\\221'" + prt_accept "p ctable1\[146\]" "146 '\\\\222'" + prt_accept "p ctable1\[147\]" "147 '\\\\223'" + prt_accept "p ctable1\[148\]" "148 '\\\\224'" + prt_accept "p ctable1\[149\]" "149 '\\\\225'" + prt_accept "p ctable1\[150\]" "150 '\\\\226'" + prt_accept "p ctable1\[151\]" "151 '\\\\227'" + prt_accept "p ctable1\[152\]" "152 '\\\\230'" + prt_accept "p ctable1\[153\]" "153 '\\\\231'" + prt_accept "p ctable1\[154\]" "154 '\\\\232'" + prt_accept "p ctable1\[155\]" "155 '\\\\233'" + prt_accept "p ctable1\[156\]" "156 '\\\\234'" + prt_accept "p ctable1\[157\]" "157 '\\\\235'" + prt_accept "p ctable1\[158\]" "158 '\\\\236'" + prt_accept "p ctable1\[159\]" "159 '\\\\237'" + prt_accept "p ctable1\[160\]" "160 '\\\\240'" + prt_accept "p ctable1\[161\]" "161 '\\\\241'" + prt_accept "p ctable1\[162\]" "162 '\\\\242'" + prt_accept "p ctable1\[163\]" "163 '\\\\243'" + prt_accept "p ctable1\[164\]" "164 '\\\\244'" + prt_accept "p ctable1\[165\]" "165 '\\\\245'" + prt_accept "p ctable1\[166\]" "166 '\\\\246'" + prt_accept "p ctable1\[167\]" "167 '\\\\247'" + prt_accept "p ctable1\[168\]" "168 '\\\\250'" + prt_accept "p ctable1\[169\]" "169 '\\\\251'" + prt_accept "p ctable1\[170\]" "170 '\\\\252'" + prt_accept "p ctable1\[171\]" "171 '\\\\253'" + prt_accept "p ctable1\[172\]" "172 '\\\\254'" + prt_accept "p ctable1\[173\]" "173 '\\\\255'" + prt_accept "p ctable1\[174\]" "174 '\\\\256'" + prt_accept "p ctable1\[175\]" "175 '\\\\257'" + prt_accept "p ctable1\[176\]" "176 '\\\\260'" + prt_accept "p ctable1\[177\]" "177 '\\\\261'" + prt_accept "p ctable1\[178\]" "178 '\\\\262'" + prt_accept "p ctable1\[179\]" "179 '\\\\263'" + prt_accept "p ctable1\[180\]" "180 '\\\\264'" + prt_accept "p ctable1\[181\]" "181 '\\\\265'" + prt_accept "p ctable1\[182\]" "182 '\\\\266'" + prt_accept "p ctable1\[183\]" "183 '\\\\267'" + prt_accept "p ctable1\[184\]" "184 '\\\\270'" + prt_accept "p ctable1\[185\]" "185 '\\\\271'" + prt_accept "p ctable1\[186\]" "186 '\\\\272'" + prt_accept "p ctable1\[187\]" "187 '\\\\273'" + prt_accept "p ctable1\[188\]" "188 '\\\\274'" + prt_accept "p ctable1\[189\]" "189 '\\\\275'" + prt_accept "p ctable1\[190\]" "190 '\\\\276'" + prt_accept "p ctable1\[191\]" "191 '\\\\277'" + prt_accept "p ctable1\[192\]" "192 '\\\\300'" + prt_accept "p ctable1\[193\]" "193 '\\\\301'" + prt_accept "p ctable1\[194\]" "194 '\\\\302'" + prt_accept "p ctable1\[195\]" "195 '\\\\303'" + prt_accept "p ctable1\[196\]" "196 '\\\\304'" + prt_accept "p ctable1\[197\]" "197 '\\\\305'" + prt_accept "p ctable1\[198\]" "198 '\\\\306'" + prt_accept "p ctable1\[199\]" "199 '\\\\307'" + prt_accept "p ctable1\[200\]" "200 '\\\\310'" + prt_accept "p ctable1\[201\]" "201 '\\\\311'" + prt_accept "p ctable1\[202\]" "202 '\\\\312'" + prt_accept "p ctable1\[203\]" "203 '\\\\313'" + prt_accept "p ctable1\[204\]" "204 '\\\\314'" + prt_accept "p ctable1\[205\]" "205 '\\\\315'" + prt_accept "p ctable1\[206\]" "206 '\\\\316'" + prt_accept "p ctable1\[207\]" "207 '\\\\317'" + prt_accept "p ctable1\[208\]" "208 '\\\\320'" + prt_accept "p ctable1\[209\]" "209 '\\\\321'" + prt_accept "p ctable1\[210\]" "210 '\\\\322'" + prt_accept "p ctable1\[211\]" "211 '\\\\323'" + prt_accept "p ctable1\[212\]" "212 '\\\\324'" + prt_accept "p ctable1\[213\]" "213 '\\\\325'" + prt_accept "p ctable1\[214\]" "214 '\\\\326'" + prt_accept "p ctable1\[215\]" "215 '\\\\327'" + prt_accept "p ctable1\[216\]" "216 '\\\\330'" + prt_accept "p ctable1\[217\]" "217 '\\\\331'" + prt_accept "p ctable1\[218\]" "218 '\\\\332'" + prt_accept "p ctable1\[219\]" "219 '\\\\333'" + prt_accept "p ctable1\[220\]" "220 '\\\\334'" + prt_accept "p ctable1\[221\]" "221 '\\\\335'" + prt_accept "p ctable1\[222\]" "222 '\\\\336'" + prt_accept "p ctable1\[223\]" "223 '\\\\337'" + prt_accept "p ctable1\[224\]" "224 '\\\\340'" + prt_accept "p ctable1\[225\]" "225 '\\\\341'" + prt_accept "p ctable1\[226\]" "226 '\\\\342'" + prt_accept "p ctable1\[227\]" "227 '\\\\343'" + prt_accept "p ctable1\[228\]" "228 '\\\\344'" + prt_accept "p ctable1\[229\]" "229 '\\\\345'" + prt_accept "p ctable1\[230\]" "230 '\\\\346'" + prt_accept "p ctable1\[231\]" "231 '\\\\347'" + prt_accept "p ctable1\[232\]" "232 '\\\\350'" + prt_accept "p ctable1\[233\]" "233 '\\\\351'" + prt_accept "p ctable1\[234\]" "234 '\\\\352'" + prt_accept "p ctable1\[235\]" "235 '\\\\353'" + prt_accept "p ctable1\[236\]" "236 '\\\\354'" + prt_accept "p ctable1\[237\]" "237 '\\\\355'" + prt_accept "p ctable1\[238\]" "238 '\\\\356'" + prt_accept "p ctable1\[239\]" "239 '\\\\357'" + prt_accept "p ctable1\[240\]" "240 '\\\\360'" + prt_accept "p ctable1\[241\]" "241 '\\\\361'" + prt_accept "p ctable1\[242\]" "242 '\\\\362'" + prt_accept "p ctable1\[243\]" "243 '\\\\363'" + prt_accept "p ctable1\[244\]" "244 '\\\\364'" + prt_accept "p ctable1\[245\]" "245 '\\\\365'" + prt_accept "p ctable1\[246\]" "246 '\\\\366'" + prt_accept "p ctable1\[247\]" "247 '\\\\367'" + prt_accept "p ctable1\[248\]" "248 '\\\\370'" + prt_accept "p ctable1\[249\]" "249 '\\\\371'" + prt_accept "p ctable1\[250\]" "250 '\\\\372'" + prt_accept "p ctable1\[251\]" "251 '\\\\373'" + prt_accept "p ctable1\[252\]" "252 '\\\\374'" + prt_accept "p ctable1\[253\]" "253 '\\\\375'" + prt_accept "p ctable1\[254\]" "254 '\\\\376'" + prt_accept "p ctable1\[255\]" "255 '\\\\377'" + + if $passcount then { + pass "$passcount of 256 characters printed from ASCII table" + } +} + +# Test interaction of the number of print elements to print and the +# repeat count, set to the default of 10. + +proc test_print_repeats_10 {} { + global prompt + global passcount + + set passcount 0 + send "set print elements 1\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"a\"..." + if $passcount then { + pass "$passcount tests with elements = 1 and repeat count = 10" + } + + set passcount 0 + send "set print elements 2\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\"..." + if $passcount then { + pass "$passcount tests with elements = 2 and repeat count = 10" + } + + set passcount 0 + send "set print elements 3\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\"..." + if $passcount then { + pass "$passcount tests with elements = 3 and repeat count = 10" + } + + set passcount 0 + send "set print elements 4\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\"..." + if $passcount then { + pass "$passcount tests with elements = 4 and repeat count = 10" + } + + set passcount 0 + send "set print elements 5\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\"..." + if $passcount then { + pass "$passcount tests with elements = 5 and repeat count = 10" + } + + set passcount 0 + send "set print elements 6\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaa\"..." + if $passcount then { + pass "$passcount tests with elements = 6 and repeat count = 10" + } + + set passcount 0 + send "set print elements 7\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaa\"..." + if $passcount then { + pass "$passcount tests with elements = 7 and repeat count = 10" + } + + set passcount 0 + send "set print elements 8\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaa\"..." + if $passcount then { + pass "$passcount tests with elements = 8 and repeat count = 10" + } + + set passcount 0 + send "set print elements 9\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaa\"..." + if $passcount then { + pass "$passcount tests with elements = 9 and repeat count = 10" + } + + set passcount 0 + send "set print elements 10\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaa\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaa\"..." + if $passcount then { + pass "$passcount tests with elements = 10 and repeat count = 10" + } + + set passcount 0 + send "set print elements 11\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aXXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaaX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>..." + if $passcount then { + pass "$passcount tests with elements = 11 and repeat count = 10" + } + + set passcount 0 + send "set print elements 12\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"a\", 'X' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaXXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaaXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>, \"X\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>..." + if $passcount then { + pass "$passcount tests with elements = 12 and repeat count = 10" + } + + set passcount 0 + send "set print elements 13\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"a\", 'X' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\", 'X' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaXXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaaXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>, \"XX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>, \"X\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 13 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 13 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 13 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 13 times>..." + if $passcount then { + pass "$passcount tests with elements = 13 and repeat count = 10" + } + + set passcount 0 + send "set print elements 14\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"a\", 'X' <repeats 13 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\", 'X' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\", 'X' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaXXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaaXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>, \"XXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>, \"XX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 13 times>, \"X\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 14 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 14 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 14 times>..." + if $passcount then { + pass "$passcount tests with elements = 14 and repeat count = 10" + } + + set passcount 0 + send "set print elements 15\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"a\", 'X' <repeats 14 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\", 'X' <repeats 13 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\", 'X' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\", 'X' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaXXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaaXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>, \"XXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>, \"XXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 13 times>, \"XX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 14 times>, \"X\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 15 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 15 times>..." + if $passcount then { + pass "$passcount tests with elements = 15 and repeat count = 10" + } + + set passcount 0 + send "set print elements 16\n" ; expect -re "$prompt $" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[0*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"a\", 'X' <repeats 15 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[1*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aa\", 'X' <repeats 14 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[2*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaa\", 'X' <repeats 13 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[3*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaa\", 'X' <repeats 12 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[4*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaa\", 'X' <repeats 11 times>..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[5*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaXXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[6*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaXXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[7*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaXXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[8*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaXXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[9*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"aaaaaaaaaaXXXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[10*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 11 times>, \"XXXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[11*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 12 times>, \"XXXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[12*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 13 times>, \"XXX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[13*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 14 times>, \"XX\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[14*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 15 times>, \"X\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable2\[15*16\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ 'a' <repeats 16 times>" + if $passcount then { + pass "$passcount tests with elements = 16 and repeat count = 10" + } +} + +proc test_print_strings {} { + global prompt + global passcount + + # We accept "(unsigned char *) " before the string. char vs. unsigned char + # is already tested elsewhere. + + # Test that setting print elements unlimited doesn't completely suppress + # printing; this was a bug in older gdb's. + send "set print elements 0\n" ; expect -re "$prompt $" + gdb_test "p teststring" \ + " = (.unsigned char .. )?\"teststring contents\"\r\n" + send "set print elements 1\n" ; expect -re "$prompt $" + gdb_test "p teststring" \ + " = (.unsigned char .. )?\"t\"...\r\n" + send "set print elements 5\n" ; expect -re "$prompt $" + gdb_test "p teststring" \ + " = (.unsigned char .. )?\"tests\"...\r\n" + send "set print elements 19\n" ; expect -re "$prompt $" + gdb_test "p teststring" \ + " = (.unsigned char .. )?\"teststring contents\"\r\n" + send "set print elements 20\n" ; expect -re "$prompt $" + gdb_test "p teststring" \ + " = (.unsigned char .. )?\"teststring contents\"\r\n" + + set passcount 0 + send "set print elements 8\n" ; expect -re "$prompt $" + + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[0\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\"" + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[1\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\001\\\\002\\\\003\\\\004\\\\005\\\\006\\\\a\\\\b\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[1*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\b\\\\t\\\\n\\\\013\\\\f\\\\r\\\\016\\\\017\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[2*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\020\\\\021\\\\022\\\\023\\\\024\\\\025\\\\026\\\\027\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[3*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\030\\\\031\\\\032\\\\e\\\\034\\\\035\\\\036\\\\037\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[4*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \" !\\\\\"#\\\$%&'\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[5*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\[(\]+\[)\]+\[*\]+\\+,-./\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[6*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"01234567\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[7*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"89:;<=>\\?\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[8*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"@ABCDEFG\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[9*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"HIJKLMNO\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[10*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"PQRSTUVW\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[11*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"XYZ\\\[\\\\\\\\\\\]\\^_\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[12*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"`abcdefg\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[13*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"hijklmno\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[14*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"pqrstuvw\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[15*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"xyz\[{|}\]+\\~\\\\177\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[16*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\200\\\\201\\\\202\\\\203\\\\204\\\\205\\\\206\\\\207\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[17*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\210\\\\211\\\\212\\\\213\\\\214\\\\215\\\\216\\\\217\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[18*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\220\\\\221\\\\222\\\\223\\\\224\\\\225\\\\226\\\\227\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[19*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\230\\\\231\\\\232\\\\233\\\\234\\\\235\\\\236\\\\237\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[20*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\240\\\\241\\\\242\\\\243\\\\244\\\\245\\\\246\\\\247\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[21*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\250\\\\251\\\\252\\\\253\\\\254\\\\255\\\\256\\\\257\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[22*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\260\\\\261\\\\262\\\\263\\\\264\\\\265\\\\266\\\\267\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[23*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\270\\\\271\\\\272\\\\273\\\\274\\\\275\\\\276\\\\277\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[24*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\300\\\\301\\\\302\\\\303\\\\304\\\\305\\\\306\\\\307\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[25*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\310\\\\311\\\\312\\\\313\\\\314\\\\315\\\\316\\\\317\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[26*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\320\\\\321\\\\322\\\\323\\\\324\\\\325\\\\326\\\\327\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[27*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\330\\\\331\\\\332\\\\333\\\\334\\\\335\\\\336\\\\337\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[28*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\340\\\\341\\\\342\\\\343\\\\344\\\\345\\\\346\\\\347\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[29*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\350\\\\351\\\\352\\\\353\\\\354\\\\355\\\\356\\\\357\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[30*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\360\\\\361\\\\362\\\\363\\\\364\\\\365\\\\366\\\\367\"..." + setup_xfail "a29k-*-udi" 2417 + prt_accept "p &ctable1\[31*8\]" \ + "\[(\]+unsigned char \[*\]+\[)\]+ \"\\\\370\\\\371\\\\372\\\\373\\\\374\\\\375\\\\376\\\\377\"..." + + if $passcount then { + pass "$passcount tests printing substrings from ASCII table" + } +} + +proc test_print_int_arrays {} { + global prompt + global passcount + + set passcount 0 + send "set print elements 24\n" ; expect -re "$prompt $" + + prt_accept "p int1dim" \ + "{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}" + prt_accept "p int2dim" \ + "{{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}}" + prt_accept "p int3dim" \ + "{{{0, 1}, {2, 3}, {4, 5}}, {{6, 7}, {8, 9}, {10, 11}}}" + prt_accept "p int4dim" \ + "{{{{0, 1}, {2, 3}, {4, 5}}, {{6, 7}, {8, 9}, {10, 11}}}}" + + if $passcount then { + pass "$passcount tests printing multidimensional arrays" + } +} + +proc test_print_char_arrays {} { + global prompt + global passcount + global hex + + set passcount 0 + send "set print elements 24\n" ; expect -re "$prompt $" + send "set print address on\n" ; expect -re "$prompt $" + + prt_accept "p arrays" \ + "{array1 = \"abc\", array2 = \"d\", array3 = \"e\", array4 = \"fg\", array5 = \"hij\"}" + + prt_accept "p parrays" "\[(\]+struct some_arrays \[*\]+\[)\]+ $hex" + prt_accept "p parrays->array1" "\"abc\"" + prt_accept "p &parrays->array1" "\[(\]+unsigned char \[*\]+\[)\]+ $hex \"abc\"" + prt_accept "p parrays->array2" "\"d\"" + prt_accept "p &parrays->array2" "\[(\]+unsigned char \[*\]+\[)\]+ $hex \"defghij\"" + prt_accept "p parrays->array3" "\"e\"" + prt_accept "p &parrays->array3" "\[(\]+unsigned char \[*\]+\[)\]+ $hex \"efghij\"" + prt_accept "p parrays->array4" "\"fg\"" + prt_accept "p &parrays->array4" "\[(\]+unsigned char \[*\]+\[)\]+ $hex \"fghij\"" + prt_accept "p parrays->array5" "\"hij\"" + prt_accept "p &parrays->array5" "\[(\]+unsigned char \[*\]+\[)\]+ $hex \"hij\"" + + send "set print address off\n" ; expect -re "$prompt $" + if $passcount then { + pass "$passcount tests printing character arrays" + } +} + +proc test_print_string_constants {} { + global prompt + global passcount + global timeout + + set otimeout $timeout + set timeout 120 + + set passcount 0 + + send "set print elements 50\n" ; expect -re "$prompt $" + + setup_xfail "a29k-*-udi" 2416 + prt_accept "p \"a string\"" "\"a string\"" + setup_xfail "a29k-*-udi" 2416 + prt_accept "p \"embedded \\000 null\"" "\"embedded \\\\000 null\"" + setup_xfail "a29k-*-udi" 2416 + prt_accept "p \"abcd\"\[2\]" "99 'c'" + setup_xfail "a29k-*-udi" 2416 + prt_accept "p sizeof (\"abcdef\")" "7" + setup_xfail "a29k-*-udi" 2416 + prt_accept "ptype \"foo\"" "char \\\[4\\\]" + setup_xfail "a29k-*-udi" 2416 + prt_accept "p *\"foo\"" "102 'f'" + setup_xfail "a29k-*-udi" 2416 + prt_accept "ptype *\"foo\"" "char" + setup_xfail "a29k-*-udi" 2416 + prt_accept "p &*\"foo\"" "\"foo\"" + setup_xfail "*-*-*" + prt_accept "ptype &*\"foo\"" "char \[*\]+" + setup_xfail "a29k-*-udi" 2416 + prt_accept "p (char *)\"foo\"" "\"foo\"" + + set timeout $otimeout + + if $passcount then { + pass "$passcount tests printing string constants" + } +} + +proc test_print_array_constants {} { + global timeout + + set otimeout $timeout + set timeout 120 + + setup_xfail "a29k-*-udi" 2416 + gdb_test "print {'a','b','c'}" " = \"abc\"" + setup_xfail "a29k-*-udi" 2416 + gdb_test "print {0,1,2}" " = {0, 1, 2}" + setup_xfail "a29k-*-udi" 2416 + gdb_test "print {(long)0,(long)1,(long)2}" " = {0, 1, 2}" + setup_xfail "a29k-*-udi" 2416 + gdb_test "print {{0,1,2},{3,4,5}}" " = {{0, 1, 2}, {3, 4, 5}}" + setup_xfail "a29k-*-udi" 2416 + gdb_test "print {4,5,6}\\\[2\\\]" " = 6" + setup_xfail "a29k-*-udi" 2416 + gdb_test "print *&{4,5,6}\\\[1\\\]" " = 5" + + set timeout $otimeout +} + +proc test_printf {} { + gdb_test "printf \\\"x=%d,y=%d,z=%d\\\\n\\\", 5, 6, 7" "x=5,y=6,z=7" + gdb_test "printf \\\"string=%.4sxx\\\\n\\\", teststring" "string=testxx" + gdb_test "printf \\\"string=%sxx\\\\n\\\", teststring" \ + "string=teststring contentsxx" + + gdb_test "printf \\\"%f is fun\\\\n\\\", 1.0" "1\.0+ is fun" + + # Test mixing args of different sizes. + gdb_test "printf \\\"x=%d,y=%f,z=%d\\\\n\\\", 5, 6.0, 7" "x=5,y=6\.0+,z=7" + gdb_test "printf \\\"%x %f, %c %x, %x, %f\\\\n\\\", 0xbad, -99.541, 'z',\ +0xfeedface, 0xdeadbeef, 5.0" "bad -99.5410+, z feedface, deadbeef, 5.0+" +} + +# 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 $" +send "set print address off\n" ; expect -re "$prompt $" +send "set width 0\n" ; expect -re "$prompt $" + +if [set_lang_c] then { +# On AIX, we can't print variables before we run the program. This is because +# the data segment and text segment are in the same address space until +# they are relocated. Ick. + setup_xfail "rs6000-*-aix*" + gdb_test "p ctable1\\\[120\\\]" "120 'x'" + + if [runto main] then { + test_integer_literals_accepted + test_integer_literals_rejected + test_character_literals_accepted + test_print_all_chars + test_print_repeats_10 + test_print_strings + test_print_int_arrays + test_print_char_arrays +# We used to do the runto main here. + test_print_string_constants + test_print_array_constants + test_printf + if [istarget "a29k-*-udi"] then { + # FIXME: If PR 2415 is fixed, this is not needed. + gdb_target_udi + } + } +} else { + fail "C print command tests suppressed" +} diff --git a/gdb/testsuite/gdb.base/ptype.c b/gdb/testsuite/gdb.base/ptype.c new file mode 100644 index 0000000..1f3858e --- /dev/null +++ b/gdb/testsuite/gdb.base/ptype.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/ptype.exp b/gdb/testsuite/gdb.base/ptype.exp new file mode 100644 index 0000000..e69a8d1 --- /dev/null +++ b/gdb/testsuite/gdb.base/ptype.exp @@ -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 + } + } +} diff --git a/gdb/testsuite/gdb.base/radix.exp b/gdb/testsuite/gdb.base/radix.exp new file mode 100644 index 0000000..ae288d0 --- /dev/null +++ b/gdb/testsuite/gdb.base/radix.exp @@ -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 diff --git a/gdb/testsuite/gdb.base/recurse.c b/gdb/testsuite/gdb.base/recurse.c new file mode 100644 index 0000000..6ae93a5 --- /dev/null +++ b/gdb/testsuite/gdb.base/recurse.c @@ -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); +} diff --git a/gdb/testsuite/gdb.base/recurse.exp b/gdb/testsuite/gdb.base/recurse.exp new file mode 100644 index 0000000..1bacdf4 --- /dev/null +++ b/gdb/testsuite/gdb.base/recurse.exp @@ -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 +} diff --git a/gdb/testsuite/gdb.base/return.c b/gdb/testsuite/gdb.base/return.c new file mode 100644 index 0000000..73eee61 --- /dev/null +++ b/gdb/testsuite/gdb.base/return.c @@ -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 ()); +} diff --git a/gdb/testsuite/gdb.base/run.c b/gdb/testsuite/gdb.base/run.c new file mode 100644 index 0000000..eb17bf3 --- /dev/null +++ b/gdb/testsuite/gdb.base/run.c @@ -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); +} diff --git a/gdb/testsuite/gdb.base/scope.exp b/gdb/testsuite/gdb.base/scope.exp new file mode 100644 index 0000000..d1ba89e --- /dev/null +++ b/gdb/testsuite/gdb.base/scope.exp @@ -0,0 +1,1134 @@ +# 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 "scope" +set srcfile $binfile.c + +if ![file exists $objdir/$subdir/$binfile] then { + perror "$objdir/$subdir/$binfile does not exist." + return 0 +} + +# Test locating various things when stopped just inside main, after +# running init(). To prevent cascading of errors, we report the +# first one and quit. If all pass, then we print the pass results. + +proc test_at_main {} { + global prompt + global decimal + global det_file + global srcdir + global subdir + + set passcount 0 + + # skip past init. There may be a call to __main at the start of + # main, so the first next may only get us to the init call. + send "next\n" + expect { + -re "$decimal.*foo \[)(\]+;\r\n$prompt $" {} + -re "$decimal.*init \[)(\]+;\r\n$prompt $"\ + { send "next\n" ; exp_continue } + -re "$prompt $" { fail "next over init() in main" ; return } + timeout { fail "(timeout) next over init() in main" ; return } + } + + # Print scope0.c::filelocal, which is 1 + + send "print filelocal\n" + expect { + -re "\\\$$decimal = 1\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal" ; return } + timeout { + fail "(timeout) print filelocal" ; return + } + } + + # The RS/6000 does not seem to be handle print 'file'::var. + setup_xfail "rs6000-*-*" + # This used to work, but is now broken for some reason. + setup_xfail "*-*-*" + send "print 'scope0.c'::filelocal\n" + expect { + -re "\\\$$decimal = 1\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal" ; return + } + } + + # Print scope0.c::filelocal_bss, which is 101 + + send "print filelocal_bss\n" + expect { + -re "\\\$$decimal = 101\r\n$prompt $" { incr passcount } + -re "$prompt $" { print filelocal_bss" ; return } + timeout { + fail "(timeout) print filelocal_bss" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope0.c'::filelocal_bss\n" + expect { + -re "\\\$$decimal = 101\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal_bss" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal_bss" ; return + } + } + + # Print scope0.c::filelocal_ro, which is 201 + + send "print filelocal_ro\n" + expect { + -re "\\\$$decimal = 201\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal_ro" ; return } + timeout { + fail "(timeout) print filelocal_ro" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope0.c'::filelocal_ro\n" + expect { + -re "\\\$$decimal = 201\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal_ro" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal_ro" ; return + } + } + + # Print scope1.c::filelocal, which is 2 + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal\n" + expect { + -re "\\\$$decimal = 2\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal" ; return + } + } + + # Print scope1.c::filelocal_bss, which is 102 + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal_bss\n" + expect { + -re "\\\$$decimal = 102\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal_bss" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal_bss" ; return + } + } + + # Print scope1.c::filelocal_ro, which is 202 + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal_ro\n" + expect { + -re "\\\$$decimal = 202\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal_ro\n" + exp_continue + } + -re "$prompt " {fail "print 'scope1.c'::filelocal_ro" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal_ro" ; return + } + } + + # Print scope1.c::foo::funclocal, which is 3 + + setup_xfail "mips-*-*" 1843 + send "print foo::funclocal\n" + expect { + -re "\\\$$decimal = 3\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal" ; return } + timeout { + fail "(timeout) print foo::funclocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal\n" + expect { + -re "\\\$$decimal = 3\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal" ; return + } + } + + # Print scope1.c::foo::funclocal_ro, which is 203 + + send "print foo::funclocal_ro\n" + expect { + -re "\\\$$decimal = 203\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal_ro" ; return } + timeout { + fail "(timeout) print foo::funclocal_ro" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal_ro\n" + expect { + -re "\\\$$decimal = 203\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal_ro" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal_ro" ; return + } + } + + # Print scope1.c::bar::funclocal, which is 4 + + send "print bar::funclocal\n" + expect { + -re "\\\$$decimal = 4\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print bar::funclocal" ; return } + timeout { + fail "(timeout) print bar::funclocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::bar::funclocal\n" + expect { + -re "\\\$$decimal = 4\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::bar::funclocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::bar::funclocal" ; return } + timeout { + fail "print 'scope1.c'::bar::funclocal" ; return + } + } + + clear_xfail "*-*-*" + pass "$passcount correct scope resolutions from main()" +} + +proc test_at_foo {} { + global prompt + global decimal + global det_file + global srcdir + global subdir + + set passcount 0 + + send "next\n" + expect { + -re ".*bar \[)(\]+;\r\n$prompt $" {} + -re "$prompt $" { fail "continue to foo()" ; return } + timeout { fail "(timeout) continue to foo()" ; return } + } + + # Print scope0.c::filelocal, which is 1 + + setup_xfail "rs6000-*-*" + # This used to work, but is now broken for some reason. + setup_xfail "*-*-*" + send "print 'scope0.c'::filelocal\n" + expect { + -re "\\\$$decimal = 1\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal" ; return + } + } + + # Print scope0.c::filelocal_bss, which is 101 + + setup_xfail "rs6000-*-*" + send "print 'scope0.c'::filelocal_bss\n" + expect { + -re "\\\$$decimal = 101\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal_bss" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal_bss" ; return + } + } + + # Print scope0.c::filelocal_ro, which is 201 + + setup_xfail "rs6000-*-*" + send "print 'scope0.c'::filelocal_ro\n" + expect { + -re "\\\$$decimal = 201\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal_ro" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal_ro" ; return + } + } + + # Print scope1.c::filelocal, which is 2 + + send "print filelocal\n" + expect { + -re "\\\$$decimal = 2\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal" ; return } + timeout { + fail "(timeout) print filelocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal\n" + expect { + -re "\\\$$decimal = 2\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal" ; return + } + } + + # Print scope1.c::filelocal_bss, which is 102 + + send "print filelocal_bss\n" + expect { + -re "\\\$$decimal = 102\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal_bss" ; return } + timeout { + fail "(timeout) print filelocal_bss" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal_bss\n" + expect { + -re "\\\$$decimal = 102\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal_bss" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal_bss" ; return + } + } + + # Print scope1.c::filelocal_ro, which is 202 + + send "print filelocal_ro\n" + expect { + -re "\\\$$decimal = 202\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal_ro" ; return } + timeout { + fail "(timeout) print filelocal_ro" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal_ro\n" + expect { + -re "\\\$$decimal = 202\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal_ro" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal_ro" ; return + } + } + + # Print scope1.c::foo::funclocal, which is 3 + + send "print funclocal\n" + expect { + -re "\\\$$decimal = 3\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print funclocal" ; return } + timeout { + fail "(timeout) print funclocal" ; return + } + } + + setup_xfail "mips-*-*" 1843 + send "print foo::funclocal\n" + expect { + -re "\\\$$decimal = 3\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal" ; return } + timeout { + fail "(timeout) print foo::funclocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal\n" + expect { + -re "\\\$$decimal = 3\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal" ; return + } + } + + # Print scope1.c::foo::funclocal_bss, which is 103 + + send "print funclocal_bss\n" + expect { + -re "\\\$$decimal = 103\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print funclocal_bss" ; return } + timeout { + fail "(timeout) print funclocal_bss" ; return + } + } + + send "print foo::funclocal_bss\n" + expect { + -re "\\\$$decimal = 103\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal_bss" ; return } + timeout { + fail "(timeout) print foo::funclocal_bss" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal_bss\n" + expect { + -re "\\\$$decimal = 103\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal_bss" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal_bss" ; return + } + } + + # Print scope1.c::foo::funclocal_ro, which is 203 + + send "print funclocal_ro\n" + expect { + -re "\\\$$decimal = 203\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print funclocal_ro" ; return } + timeout { + fail "(timeout) print funclocal_ro" ; return + } + } + + send "print foo::funclocal_ro\n" + expect { + -re "\\\$$decimal = 203\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal_ro" ; return } + timeout { + fail "(timeout) print foo::funclocal_ro" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal_ro\n" + expect { + -re "\\\$$decimal = 203\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal_ro" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal_ro" ; return + } + } + + # Print scope1.c::bar::funclocal, which is 4 + + send "print bar::funclocal\n" + expect { + -re "\\\$$decimal = 4\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print bar::funclocal" ; return } + timeout { + fail "(timeout) print bar::funclocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::bar::funclocal\n" + expect { + -re "\\\$$decimal = 4\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::bar::funclocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::bar::funclocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::bar::funclocal" ; return + } + } + + clear_xfail "*-*-*" + pass "$passcount correct scope resolutions from foo()" +} + +proc test_at_bar {} { + global prompt + global decimal + global det_file + global srcdir + global subdir + + set passcount 0 + + send "next\n" + expect { + -re ".*$prompt $" {} + timeout { fail "next in bar()" ; return } + } + + # Print scope0.c::filelocal, which is 1 + + setup_xfail "rs6000-*-*" + # This used to work, but is now broken for some reason. + setup_xfail "*-*-*" + send "print 'scope0.c'::filelocal\n" + expect { + -re "\\\$$decimal = 1\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal" ; return + } + } + + # Print scope0.c::filelocal_bss, which is 101 + + setup_xfail "rs6000-*-*" + send "print 'scope0.c'::filelocal_bss\n" + expect { + -re "\\\$$decimal = 101\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal_bss" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal_bss" ; return + } + } + + # Print scope0.c::filelocal_ro, which is 201 + + setup_xfail "rs6000-*-*" + send "print 'scope0.c'::filelocal_ro\n" + expect { + -re "\\\$$decimal = 201\r\n$prompt $" { incr passcount } + -re "No symbol \"scope0.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope0.c'::filelocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope0.c'::filelocal_ro" ; return } + timeout { + fail "(timeout) print 'scope0.c'::filelocal_ro" ; return + } + } + + # Print scope1.c::filelocal, which is 2 + + send "print filelocal\n" + expect { + -re "\\\$$decimal = 2\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal" ; return } + timeout { + fail "(timeout) print filelocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal\n" + expect { + -re "\\\$$decimal = 2\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal" ; return + } + } + + # Print scope1.c::filelocal_bss, which is 102 + + send "print filelocal_bss\n" + expect { + -re "\\\$$decimal = 102\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal_bss" ; return } + timeout { + fail "(timeout) print filelocal_bss" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal_bss\n" + expect { + -re "\\\$$decimal = 102\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal_bss" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal_bss" ; return + } + } + + # Print scope1.c::filelocal_ro, which is 202 + + send "print filelocal_ro\n" + expect { + -re "\\\$$decimal = 202\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print filelocal_ro" ; return } + timeout { + fail "(timeout) print filelocal_ro" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::filelocal_ro\n" + expect { + -re "\\\$$decimal = 202\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::filelocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::filelocal_ro" ; return } + timeout { + fail "(timeout) print 'scope1.c'::filelocal_ro" ; return + } + } + + # Print scope1.c::foo::funclocal, which is 3 + + setup_xfail "mips-*-*" 1843 + send "print foo::funclocal\n" + expect { + -re "\\\$$decimal = 3\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal" ; return } + timeout { + fail "(timeout) print foo::funclocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal\n" + expect { + -re "\\\$$decimal = 3\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal" ; return + } + } + + # Print scope1.c::foo::funclocal_bss, which is 103 + + send "print foo::funclocal_bss\n" + expect { + -re "\\\$$decimal = 103\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal_bss" ; return } + timeout { + fail "(timeout) print foo::funclocal_bss" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal_bss\n" + expect { + -re "\\\$$decimal = 103\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal_bss" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal_bss" ; return + } + } + + # Print scope1.c::foo::funclocal_ro, which is 203 + + send "print foo::funclocal_ro\n" + expect { + -re "\\\$$decimal = 203\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print foo::funclocal_ro" ; return } + timeout { + fail "(timeout) print foo::funclocal_ro" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::foo::funclocal_ro\n" + expect { + -re "\\\$$decimal = 203\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::foo::funclocal_ro\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::foo::funclocal_ro" ; return } + timeout { + fail "(timeout) print 'scope1.c'::foo::funclocal_ro" ; return + } + } + + # Print scope1.c::bar::funclocal, which is 4 + + send "print funclocal\n" + expect { + -re "\\\$$decimal = 4\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print funclocal" ; return } + timeout { + fail "(timeout) print funclocal" ; return + } + } + + send "print bar::funclocal\n" + expect { + -re "\\\$$decimal = 4\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print bar::funclocal" ; return } + timeout { + fail "(timeout) print bar::funclocal" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::bar::funclocal\n" + expect { + -re "\\\$$decimal = 4\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::bar::funclocal\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::bar::funclocal" ; return } + timeout { + fail "(timeout) print 'scope1.c'::bar::funclocal" ; return + } + } + + # Print scope1.c::bar::funclocal_bss, which is 104 + + send "print funclocal_bss\n" + expect { + -re "\\\$$decimal = 104\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print funclocal_bss" ; return } + timeout { + fail "(timeout) print funclocal_bss" ; return + } + } + + send "print bar::funclocal_bss\n" + expect { + -re "\\\$$decimal = 104\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "print bar::funclocal_bss" ; return } + timeout { + fail "(timeout) print bar::funclocal_bss" ; return + } + } + + setup_xfail "rs6000-*-*" + send "print 'scope1.c'::bar::funclocal_bss\n" + expect { + -re "\\\$$decimal = 104\r\n$prompt $" { incr passcount } + -re "No symbol \"scope1.c\" in current context.*$prompt $" { + send "print '$srcdir/$subdir/scope1.c'::bar::funclocal_bss\n" + exp_continue + } + -re "$prompt $" { fail "print 'scope1.c'::bar::funclocal_bss" ; return } + timeout { + fail "(timeout) print 'scope1.c'::bar::funclocal_bss" ; return + } + } + + clear_xfail "*-*-*" + pass "$passcount correct scope resolutions from bar()" +} + +# FIXME: This test was originally part of some local scope resolution +# tests. It probably belongs somewhere else now. + +proc test_at_autovars {} { + global prompt + global decimal + global hex + global srcfile + + # Test symbol table lookup with 100 local (auto) variables. + + send "break marker1\n" ; expect -re ".*$prompt $" + + send "cont\n" + expect { + -re "Break.* marker1 \[)(\]+ at .*:$decimal.*$prompt $" { + send "up\n" + expect { + -re ".*$prompt $" {} + timeout { fail "up from marker1" ; return } + } + } + -re "$prompt $" { fail "continue to marker1" ; return } + timeout { fail "(timeout) continue to marker1" ; return } + } + + set count 0 + while {$count < 100} { + send "print i$count\n" + expect { + -re ".* = $count\r\n$prompt $" {} + -re "$prompt $" { + fail "bad value for auto variable i$count"; return + } + timeout { + fail "(timeout) bad value for auto variable i$count"; return + } + } + set count [expr $count+1] + } + clear_xfail "*-*-*" + pass "$count auto variables correctly initialized" + + # Test that block variable sorting is not screwing us. + gdb_test "frame" "#.*autovars \[(\]+bcd=5, abc=6\[)\]+" "args in correct order" +} + +proc test_at_localscopes {} { + global prompt + global decimal + global hex + global srcfile + + set passcount 0 + + send "break marker2\n" ; expect -re ".*$prompt $" + send "break marker3\n" ; expect -re ".*$prompt $" + send "break marker4\n" ; expect -re ".*$prompt $" + + send "cont\n" + expect { + -re "Break.* marker2 \[)(\]+ at .*:$decimal.*$prompt $" { + send "up\n" + expect { + -re ".*$prompt $" {} + timeout { fail "up from marker2" ; return } + } + } + -re "$prompt $" { fail "continue to marker2" ; return } + timeout { fail "(timeout) continue to marker2" ; return } + } + + # Should be at first (outermost) scope. Check values. + + send "print localval\n" + expect { + -re ".* = 10\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "bad value for localval, outer scope" ; return } + default { + fail "(timeout) bad value for localval, outer scope" ; return + } + } + send "print localval1\n" + expect { + -re ".* = 11\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "bad value for localval1" ; return } + timeout { fail "(timeout) bad value for localval1" ; return } + } + send "print localval2\n" + expect { + -re "No symbol \"localval2\" in current context.\r\n$prompt $" { + incr passcount + } + -re "$prompt $" { fail "bad value for localval2" ; return } + timeout { fail "(timeout) bad value for localval2" ; return } + } + send "print localval3\n" + expect { + -re "No symbol \"localval3\" in current context.\r\n$prompt $" { + incr passcount + } + -re "$prompt $" { fail "bad value for localval3" ; return } + timeout { fail "(timeout) bad value for localval3" ; return } + } + + send "cont\n" + expect { + -re "Break.* marker3 \[)(\]+ at .*:$decimal.*$prompt $" { + send "up\n" + expect { + -re ".*$prompt $" {} + timeout { fail "up from marker3" ; return } + } + } + -re "$prompt $" { fail "continue to marker3" ; return } + timeout { fail "(timeout) continue to marker3" ; return } + } + + # Should be at next (first nested) scope. Check values. + + send "print localval\n" + expect { + -re ".* = 20\r\n$prompt $" { incr passcount } + -re "$prompt $" { + fail "bad value for localval, first nested scope" ; return + } + timeout { + fail "(timeout) bad value for localval, first nested scope" ; + return + } + } + send "print localval1\n" + expect { + -re ".* = 11\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "bad value for localval1" ; return } + timeout { fail "(timeout) bad value for localval1" ; return } + } + send "print localval2\n" + expect { + -re ".* = 12\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "bad value for localval2" ; return } + timeout { fail "(timeout) bad value for localval2" ; return } + } + send "print localval3\n" + expect { + -re "No symbol \"localval3\" in current context.\r\n$prompt $" { + incr passcount + } + -re "$prompt $" { fail "bad value for localval3" ; return } + timeout { fail "(timeout) bad value for localval3" ; return } + } + + # This test will only fail if the file was compiled by gcc, but + # there's no way to check that. + setup_xfail "mips-*-*" 1868 + setup_xfail "a29k-*-udi" 2423 + send "cont\n" + expect { + -re "Break.* marker4.*at .*:$decimal.*$prompt $" { + send "up\n" + expect { + -re ".*$prompt $" {} + timeout { fail "up from marker4" ; return } + } + } + -re "$prompt $" { fail "continue to marker4" ; return } + timeout { fail "(timeout) continue to marker4" ; return } + } + + send "print localval\n" + expect { + -re ".* = 30\r\n$prompt $" { incr passcount } + -re "$prompt $" { + fail "bad value for localval, innermost scope" ; return + } + timeout { + fail "(timeout) bad value for localval, innermost scope" ; return + } + } + send "print localval1\n" + expect { + -re ".* = 11\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "bad value for localval1" ; return } + timeout { fail "(timeout) bad value for localval1" ; return } + } + send "print localval2\n" + expect { + -re ".* = 12\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "bad value for localval2" ; return } + timeout { fail "(timeout) bad value for localval2" ; return } + } + send "print localval3\n" + expect { + -re ".* = 13\r\n$prompt $" { incr passcount } + -re "$prompt $" { fail "bad value for localval3" ; return } + timeout { fail "(timeout) bad value for localval3" ; return } + } + + clear_xfail "*-*-*" + pass "$passcount correct scope resolutions from localscopes()" +} + +# Start with a fresh gdb. + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load $objdir/$subdir/$binfile + +if [istarget "*-*-vxworks"] { + set timeout 120 +} + +# Test that variables in various segments print out correctly before +# the program is run. + +# AIX--sections get mapped to the same address so we can't get the right one. +setup_xfail "rs6000-*-*" + +gdb_test "print 'scope0.c'::filelocal_ro" "= 201" + +# gdb currently cannot access bss memory on some targets if the inferior +# is not running. +send "print 'scope0.c'::filelocal_bss\n" +expect { + -re "= 0.*$prompt $" { + pass "print 'scope0.c'::filelocal_bss" + } + -re "Cannot access memory.*$prompt $" { + setup_xfail "*-*-*" + fail "print 'scope0.c'::filelocal_bss" + } + -re ".*$prompt $" { + fail "print 'scope0.c'::filelocal_bss" + } + default { + fail "print 'scope0.c'::filelocal_bss" + } +} + +# AIX--sections get mapped to the same address so we can't get the right one. +setup_xfail "rs6000-*-*" + +gdb_test "print 'scope0.c'::filelocal" "= 1" + +if [runto main] then { test_at_main } +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 +} +if [runto foo] then { test_at_foo } +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 +} +if [runto bar] then { test_at_bar } +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 +} +if [runto localscopes] then { test_at_localscopes } +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 +} +if [runto autovars] then { test_at_autovars } + +if [istarget "a29k-*-udi"] then { + # FIXME: If PR 2415 is fixed, this is not needed. + gdb_target_udi +} + +if [istarget "*-*-vxworks"] { + set timeout 120 +} diff --git a/gdb/testsuite/gdb.base/scope0.c b/gdb/testsuite/gdb.base/scope0.c new file mode 100644 index 0000000..85af2e5 --- /dev/null +++ b/gdb/testsuite/gdb.base/scope0.c @@ -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 () {} diff --git a/gdb/testsuite/gdb.base/scope1.c b/gdb/testsuite/gdb.base/scope1.c new file mode 100644 index 0000000..cccad6f --- /dev/null +++ b/gdb/testsuite/gdb.base/scope1.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/setvar.c b/gdb/testsuite/gdb.base/setvar.c new file mode 100644 index 0000000..ee98b6f --- /dev/null +++ b/gdb/testsuite/gdb.base/setvar.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/setvar.exp b/gdb/testsuite/gdb.base/setvar.exp new file mode 100644 index 0000000..3bdb8f4 --- /dev/null +++ b/gdb/testsuite/gdb.base/setvar.exp @@ -0,0 +1,1889 @@ +# 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 "setvar" + +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 + +# +# set it up at a breakpoint so we canplay with the variable values +# +send "set print sevenbit-strings\n" ; expect -re "$prompt $" + +if ![runto main] then { + perror "couldn't run to breakpoint" + continue +} + +# Determine expected output for unsigned long variables, +# the output varies with sizeof (unsigned long). + +set ulong_minus_1 4294967295 +set ulong_minus_456 4294966840 +send "print sizeof (unsigned long)\n" +expect { + -re ".\[0-9\]* = 4.*$prompt $" {} + -re ".\[0-9\]* = 8.*$prompt $" { + set ulong_minus_1 18446744073709551615 + set ulong_minus_456 18446744073709551160 + } + -re ".*$prompt $" { + fail "getting sizeof unsigned long" + } + default { fail "(timeout) getting sizeof unsigned long" } +} + +# +# test "set variable" for type "char" +# +# Because bare char types can be either signed or unsigned, we just test the +# range of values that are common to both (0-127). +# +send "set variable v_char=0\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 0 \'.000\'.*$prompt $" { pass "set variable char=0" } + -re "$prompt $" { fail "set variable char=0" } + timeout { fail "(timeout) set variable char=0" } + } + } + -re "$prompt $" { fail "set variable char=0" } + timeout { fail "(timeout) set variable char=0" } +} + + +send "set variable v_char=1\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 1 \'.001\'.*$prompt $" { pass "set variable char=1" } + -re "$prompt $" { fail "set variable char=1" } + timeout { fail "(timeout) set variable char=1" } + } + } + -re "$prompt $" { fail "set variable char=1" } + timeout { fail "(timeout) set variable char=1" } +} + + +send "set variable v_char=27\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 27 \'.e\'.*$prompt $" { pass "set variable char=27 (Esc)" } + -re "$prompt $" { fail "set variable char=27 (Esc)" } + timeout { fail "(timeout) set variable char=27 (Esc)" } + } + } + -re "$prompt $" { fail "set variable char=27 (Esc)" } + timeout { fail "(timeout) set variable char=27 (Esc)" } +} + + +send "set variable v_char=32\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 32 \' \'.*$prompt $" { pass "set variable char=32 (SPC)" } + -re "$prompt $" { fail "set variable char=32 (SPC)" } + timeout { fail "(timeout) set variable char=32 (SPC)" } + } + } + -re "$prompt $" { fail "set variable char=32 (SPC)" } + timeout { fail "(timeout) set variable char=32 (SPC)" } +} + + +send "set variable v_char=65\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 65 \'A\'.*$prompt $" { pass "set variable char=65 ('A')" } + -re "$prompt $" { fail "set variable char=65 ('A')" } + timeout { fail "(timeout) set variable char=65 ('A')" } + } + } + -re "$prompt $" { fail "set variable char=65 ('A')" } + timeout { fail "(timeout) set variable char=65 ('A')" } +} + + +send "set variable v_char=97\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 97 \'a\'.*$prompt $" { pass "set variable char=97 ('a')" } + -re "$prompt $" { fail "set variable char=97 ('a')" } + timeout { fail "(timeout) set variable char=97 ('a')" } + } + } + -re "$prompt $" { fail "set variable char=97 ('a')" } + timeout { fail "(timeout) set variable char=97 ('a')" } +} + + +send "set variable v_char=126\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 126 \'~\'.*$prompt $" { pass "set variable char=126 ('~')" } + -re "$prompt $" { fail "set variable char=126 ('~')" } + timeout { fail "(timeout) set variable char=126 ('~')" } + } + } + -re "$prompt $" { fail "set variable char=126 ('~')" } + timeout { fail "(timeout) set variable char=126 ('~')" } +} + + +send "set variable v_char=127\n" +expect { + -re "$prompt $"\ + { + send "print v_char\n" + expect { + -re ".\[0-9\]* = 127 \'.177\'.*$prompt $" { pass "set variable char=127 (8-bit)" } + -re "$prompt $" { fail "set variable char=127 (8-bit)" } + timeout { fail "(timeout) set variable char=127 (8-bit)" } + } + } + -re "$prompt $" { fail "set variable char=127 (8-bit)" } + timeout { fail "(timeout) set variable char=127 (8-bit)" } +} + + +# +# test "set variable" for type "signed char" +# +send "set variable v_char=0\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 0 \'.000\'.*$prompt $" { pass "set variable signed char=0" } + -re "$prompt $" { fail "set variable signed char=0" } + timeout { fail "(timeout) set variable signed char=0" } + } + } + -re "$prompt $" { fail "set variable signed char=0" } + timeout { fail "(timeout) set variable signed char=0" } +} + + +send "set variable v_signed_char=1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 1 \'.001\'.*$prompt $" { pass "set variable signed char=1" } + -re "$prompt $" { fail "set variable signed char=1" } + timeout { fail "(timeout) set variable signed char=1" } + } + } + -re "$prompt $" { fail "set variable signed char=1" } + timeout { fail "(timeout) set variable signed char=1" } +} + + +send "set variable v_signed_char=27\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 27 \'.e\'.*$prompt $" { pass "set variable signed char=27 (Esc)" } + -re "$prompt $" { fail "set variable signed char=27 (Esc)" } + timeout { fail "(timeout) set variable signed char=27 (Esc)" } + } + } + -re "$prompt $" { fail "set variable signed char=27 (Esc)" } + timeout { fail "(timeout) set variable signed char=27 (Esc)" } +} + + +send "set variable v_signed_char=32\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 32 \' \'.*$prompt $" { pass "set variable signed char=32 (SPC)" } + -re "$prompt $" { fail "set variable signed char=32 (SPC)" } + timeout { fail "(timeout) set variable signed char=32 (SPC)" } + } + } + -re "$prompt $" { fail "set variable signed char=32 (SPC)" } + timeout { fail "(timeout) set variable signed char=32 (SPC)" } +} + + +send "set variable v_signed_char=65\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 65 \'A\'.*$prompt $" { pass "set variable signed char=65 ('A')" } + -re "$prompt $" { fail "set variable signed char=65 ('A')" } + timeout { fail "(timeout) set variable signed char=65 ('A')" } + } + } + -re "$prompt $" { fail "set variable signed char=65 ('A')" } + timeout { fail "(timeout) set variable signed char=65 ('A')" } +} + + +send "set variable v_signed_char=97\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 97 \'a\'.*$prompt $" { pass "set variable signed char=97 ('a')" } + -re "$prompt $" { fail "set variable signed char=97 ('a')" } + timeout { fail "(timeout) set variable signed char=97 ('a')" } + } + } + -re "$prompt $" { fail "set variable signed char=97 ('a')" } + timeout { fail "(timeout) set variable signed char=97 ('a')" } +} + + +send "set variable v_signed_char=126\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 126 \'~\'.*$prompt $" { pass "set variable signed char=126 ('~')" } + -re "$prompt $" { fail "set variable signed char=126 ('~')" } + timeout { fail "(timeout) set variable signed char=126 ('~')" } + } + } + -re "$prompt $" { fail "set variable signed char=126 ('~')" } + timeout { fail "(timeout) set variable signed char=126 ('~')" } +} + + +send "set variable v_signed_char=127\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = 127 \'.177\'.*$prompt $" { pass "set variable signed char=127 (8-bit)" } + -re "$prompt $" { fail "set variable signed char=127 (8-bit)" } + timeout { fail "(timeout) set variable signed char=127 (8-bit)" } + } + } + -re "$prompt $" { fail "set variable signed char=127 (8-bit)" } + timeout { fail "(timeout) set variable signed char=127 (8-bit)" } +} + + +send "set variable v_signed_char=-1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = -1 \'.377\'.*$prompt $" { pass "set variable signed char=-1 (-1)" } + -re "$prompt $" { fail "set variable signed char=-1 (minus)" } + timeout { fail "(timeout) set variable signed char=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable signed char=-1 (minus)" } + timeout { fail "(timeout) set variable signed char=-1 (minus)" } +} + + +send "set variable v_signed_char=0xFF\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_char\n" + expect { + -re ".\[0-9\]* = -1 \'.377\'.*$prompt $" { pass "set variable signed char=0xFF (0xFF)" } + -re "$prompt $" { fail "set variable signed char=0xFF (hex)" } + timeout { fail "(timeout) set variable signed char=0xFF (hex)" } + } + } + -re "$prompt $" { fail "set variable signed char=0xFF (hex)" } + timeout { fail "(timeout) set variable signed char=0xFF (hex)" } +} + + +# +# test "set variable" for type "unsigned char" +# +send "set variable v_unsigned_char=0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 0 \'.000\'.*$prompt $" { pass "set variable unsigned char=0" } + -re "$prompt $" { fail "set variable unsigned char=0" } + timeout { fail "(timeout) set variable unsigned char=0" } + } + } + -re "$prompt $" { fail "set variable unsigned char=0" } + timeout { fail "(timeout) set variable unsigned char=0" } +} + + +send "set variable v_unsigned_char=1\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 1 \'.001\'.*$prompt $" { pass "set variable unsigned char=1" } + -re "$prompt $" { fail "set variable unsigned char=1" } + timeout { fail "(timeout) set variable unsigned char=1" } + } + } + -re "$prompt $" { fail "set variable unsigned char=1" } + timeout { fail "(timeout) set variable unsigned char=1" } +} + + +send "set variable v_unsigned_char=27\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 27 \'.e\'.*$prompt $" { pass "set variable unsigned char=27 (Esc)" } + -re "$prompt $" { fail "set variable unsigned char=27 (Esc)" } + timeout { fail "(timeout) set variable unsigned char=27 (Esc)" } + } + } + -re "$prompt $" { fail "set variable unsigned char=27 (Esc)" } + timeout { fail "(timeout) set variable unsigned char=27 (Esc)" } +} + + +send "set variable v_unsigned_char=32\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 32 \' \'.*$prompt $" { pass "set variable unsigned char=32 (SPC)" } + -re "$prompt $" { fail "set variable unsigned char=32 (SPC)" } + timeout { fail "(timeout) set variable unsigned char=32 (SPC)" } + } + } + -re "$prompt $" { fail "set variable unsigned char=32 (SPC)" } + timeout { fail "(timeout) set variable unsigned char=32 (SPC)" } +} + + +send "set variable v_unsigned_char=65\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 65 \'A\'.*$prompt $" { pass "set variable unsigned char=65 ('A')" } + -re "$prompt $" { fail "set variable unsigned char=65 ('A')" } + timeout { fail "(timeout) set variable unsigned char=65 ('A')" } + } + } + -re "$prompt $" { fail "set variable unsigned char=65 ('A')" } + timeout { fail "(timeout) set variable unsigned char=65 ('A')" } +} + + +send "set variable v_unsigned_char=97\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 97 \'a\'.*$prompt $" { pass "set variable unsigned char=97 ('a')" } + -re "$prompt $" { fail "set variable unsigned char=97 ('a')" } + timeout { fail "(timeout) set variable unsigned char=97 ('a')" } + } + } + -re "$prompt $" { fail "set variable unsigned char=97 ('a')" } + timeout { fail "(timeout) set variable unsigned char=97 ('a')" } +} + + +send "set variable v_unsigned_char=126\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 126 \'~\'.*$prompt $" { pass "set variable unsigned char=126 ('~')" } + -re "$prompt $" { fail "set variable unsigned char=126 ('~')" } + timeout { fail "(timeout) set variable unsigned char=126 ('~')" } + } + } + -re "$prompt $" { fail "set variable unsigned char=126 ('~')" } + timeout { fail "(timeout) set variable unsigned char=126 ('~')" } +} + + +send "set variable v_unsigned_char=~0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_char\n" + expect { + -re ".\[0-9\]* = 255 \'.377\'.*$prompt $" { pass "set variable unsigned char=255 (8-bit)" } + -re "$prompt $" { fail "set variable unsigned char=255 (8-bit)" } + timeout { fail "(timeout) set variable unsigned char=255 (8-bit)" } + } + } + -re "$prompt $" { fail "set variable unsigned char=255 (8-bit)" } + timeout { fail "(timeout) set variable unsigned char=255 (8-bit)" } +} + + +# +# test "set variable" for type "short" +# +send "set variable v_short=0\n" +expect { + -re "$prompt $"\ + { + send "print v_short\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable short=0" } + -re "$prompt $" { fail "set variable short=0" } + timeout { fail "(timeout) set variable short=0" } + } + } + -re "$prompt $" { fail "set variable short=0" } + timeout { fail "(timeout) set variable short=0" } +} + + +send "set variable v_short=1\n" +expect { + -re "$prompt $"\ + { + send "print v_short\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable short=1" } + -re "$prompt $" { fail "set variable short=1" } + timeout { fail "(timeout) set variable short=1" } + } + } + -re "$prompt $" { fail "set variable short=1" } + timeout { fail "(timeout) set variable short=1" } +} + + +send "set variable v_short=-1\n" +expect { + -re "$prompt $"\ + { + send "print v_short\n" + expect { + -re ".\[0-9\]* = -1.*$prompt $" { pass "set variable short=-1 (minus)" } + -re "$prompt $" { fail "set variable short=-1 (minus)" } + timeout { fail "(timeout) set variable signed short=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable short=-1 (minus)" } + timeout { fail "(timeout) set variable short=-1 (minus)" } +} + + +# +# test "set variable" for type "signed short" +# +send "set variable v_signed_short=0\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_short\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable signed short=0" } + -re "$prompt $" { fail "set variable signed short=0" } + timeout { fail "(timeout) set variable signed short=0" } + } + } + -re "$prompt $" { fail "set variable signed short=0" } + timeout { fail "(timeout) set variable signed short=0" } +} + + +send "set variable v_signed_short=1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_short\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable signed short=1" } + -re "$prompt $" { fail "set variable signed short=1" } + timeout { fail "(timeout) set variable signed short=1" } + } + } + -re "$prompt $" { fail "set variable signed short=1" } + timeout { fail "(timeout) set variable signed short=1" } +} + + +send "set variable v_signed_short=-1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_short\n" + expect { + -re ".\[0-9\]* = -1.*$prompt $" { pass "set variable signed short=-1 (minus)" } + -re "$prompt $" { fail "set variable signed short=-1 (minus)" } + timeout { fail "(timeout) set variable signed short=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable signed short=-1 (minus)" } + timeout { fail "(timeout) set variable signed short=-1 (minus)" } +} + + +# +# test "set variable" for type "unsigned short" +# +send "set variable v_unsigned_short=0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_short\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable unsigned short=0" } + -re "$prompt $" { fail "set variable unsigned short=0" } + timeout { fail "(timeout) set variable unsigned short=0" } + } + } + -re "$prompt $" { fail "set variable unsigned short=0" } + timeout { fail "(timeout) set variable unsigned short=0" } +} + + +send "set variable v_unsigned_short=1\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_short\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable unsigned short=1" } + -re "$prompt $" { fail "set variable unsigned short=1" } + timeout { fail "(timeout) set variable unsigned short=1" } + } + } + -re "$prompt $" { fail "set variable unsigned short=1" } + timeout { fail "(timeout) set variable unsigned short=1" } +} + + +send "set variable v_unsigned_short=~0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_short\n" + expect { + -re ".\[0-9\]* = 65535.*$prompt $" { pass "set variable unsigned short=~0 (minus)" } + -re "$prompt $" { fail "set variable unsigned short=~0 (minus)" } + timeout { fail "(timeout) set variable unsigned short=~0 (minus)" } + } + } + -re "$prompt $" { fail "set variable unsigned short=~0 (minus)" } + timeout { fail "(timeout) set variable unsigned short=~0 (minus)" } +} + + +# +# test "set variable" for type "int" +# +send "set variable v_int=0\n" +expect { + -re "$prompt $"\ + { + send "print v_int\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable int=0" } + -re "$prompt $" { fail "set variable int=0" } + timeout { fail "(timeout) set variable int=0" } + } + } + -re "$prompt $" { fail "set variable int=0" } + timeout { fail "(timeout) set variable int=0" } +} + + +send "set variable v_int=1\n" +expect { + -re "$prompt $"\ + { + send "print v_int\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable int=1" } + -re "$prompt $" { fail "set variable int=1" } + timeout { fail "(timeout) set variable int=1" } + } + } + -re "$prompt $" { fail "set variable int=1" } + timeout { fail "(timeout) set variable int=1" } +} + + +send "set variable v_int=-1\n" +expect { + -re "$prompt $"\ + { + send "print v_int\n" + expect { + -re ".\[0-9\]* = -1.*$prompt $" { pass "set variable int=-1 (minus)" } + -re "$prompt $" { fail "set variable int=-1 (minus)" } + timeout { fail "(timeout) set variable signed int=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable int=-1 (minus)" } + timeout { fail "(timeout) set variable int=-1 (minus)" } +} + + +# +# test "set variable" for type "signed int" +# +send "set variable v_signed_int=0\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_int\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable signed int=0" } + -re "$prompt $" { fail "set variable signed int=0" } + timeout { fail "(timeout) set variable signed int=0" } + } + } + -re "$prompt $" { fail "set variable signed int=0" } + timeout { fail "(timeout) set variable signed int=0" } +} + + +send "set variable v_signed_int=1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_int\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable signed int=1" } + -re "$prompt $" { fail "set variable signed int=1" } + timeout { fail "(timeout) set variable signed int=1" } + } + } + -re "$prompt $" { fail "set variable signed int=1" } + timeout { fail "(timeout) set variable signed int=1" } +} + + +send "set variable v_signed_int=-1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_int\n" + expect { + -re ".\[0-9\]* = -1.*$prompt $" { pass "set variable signed int=-1 (minus)" } + -re "$prompt $" { fail "set variable signed int=-1 (minus)" } + timeout { fail "(timeout) set variable signed int=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable signed int=-1 (minus)" } + timeout { fail "(timeout) set variable signed int=-1 (minus)" } +} + + +# +# test "set variable" for type "unsigned int" +# +send "set variable v_unsigned_int=0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_int\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable unsigned int=0" } + -re "$prompt $" { fail "set variable unsigned int=0" } + timeout { fail "(timeout) set variable unsigned int=0" } + } + } + -re "$prompt $" { fail "set variable unsigned int=0" } + timeout { fail "(timeout) set variable unsigned int=0" } +} + + +send "set variable v_unsigned_int=1\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_int\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable unsigned int=1" } + -re "$prompt $" { fail "set variable unsigned int=1" } + timeout { fail "(timeout) set variable unsigned int=1" } + } + } + -re "$prompt $" { fail "set variable unsigned int=1" } + timeout { fail "(timeout) set variable unsigned int=1" } +} + + +send "set variable v_unsigned_int=~0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_int\n" + expect { + -re ".\[0-9\]* = 4294967295.*$prompt $" { pass "set variable unsigned int=~0 (minus)" } + -re "$prompt $" { fail "set variable unsigned int=~0 (minus)" } + timeout { fail "(timeout) set variable unsigned int=~0 (minus)" } + } + } + -re "$prompt $" { fail "set variable unsigned int=~0 (minus)" } + timeout { fail "(timeout) set variable unsigned int=~0 (minus)" } +} + + +# +# test "set variable" for type "long" +# +send "set variable v_long=0\n" +expect { + -re "$prompt $"\ + { + send "print v_long\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable long=0" } + -re "$prompt $" { fail "set variable long=0" } + timeout { fail "(timeout) set variable long=0" } + } + } + -re "$prompt $" { fail "set variable long=0" } + timeout { fail "(timeout) set variable long=0" } +} + + +send "set variable v_long=1\n" +expect { + -re "$prompt $"\ + { + send "print v_long\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable long=1" } + -re "$prompt $" { fail "set variable long=1" } + timeout { fail "(timeout) set variable long=1" } + } + } + -re "$prompt $" { fail "set variable long=1" } + timeout { fail "(timeout) set variable long=1" } +} + + +send "set variable v_long=-1\n" +expect { + -re "$prompt $"\ + { + send "print v_long\n" + expect { + -re ".\[0-9\]* = -1.*$prompt $" { pass "set variable long=-1 (minus)" } + -re "$prompt $" { fail "set variable long=-1 (minus)" } + timeout { fail "(timeout) set variable signed long=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable long=-1 (minus)" } + timeout { fail "(timeout) set variable long=-1 (minus)" } +} + + +# +# test "set variable" for type "signed long" +# +send "set variable v_signed_long=0\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_long\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable signed long=0" } + -re "$prompt $" { fail "set variable signed long=0" } + timeout { fail "(timeout) set variable signed long=0" } + } + } + -re "$prompt $" { fail "set variable signed long=0" } + timeout { fail "(timeout) set variable signed long=0" } +} + + +send "set variable v_signed_long=1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_long\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable signed long=1" } + -re "$prompt $" { fail "set variable signed long=1" } + timeout { fail "(timeout) set variable signed long=1" } + } + } + -re "$prompt $" { fail "set variable signed long=1" } + timeout { fail "(timeout) set variable signed long=1" } +} + + +send "set variable v_signed_long=-1\n" +expect { + -re "$prompt $"\ + { + send "print v_signed_long\n" + expect { + -re ".\[0-9\]* = -1.*$prompt $" { pass "set variable signed long=-1 (minus)" } + -re "$prompt $" { fail "set variable signed long=-1 (minus)" } + timeout { fail "(timeout) set variable signed long=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable signed long=-1 (minus)" } + timeout { fail "(timeout) set variable signed long=-1 (minus)" } +} + + +# +# test "set variable" for type "unsigned long" +# +send "set variable v_unsigned_long=0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_long\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable unsigned long=0" } + -re "$prompt $" { fail "set variable unsigned long=0" } + timeout { fail "(timeout) set variable unsigned long=0" } + } + } + -re "$prompt $" { fail "set variable unsigned long=0" } + timeout { fail "(timeout) set variable unsigned long=0" } +} + + +send "set variable v_unsigned_long=1\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_long\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable unsigned long=1" } + -re "$prompt $" { fail "set variable unsigned long=1" } + timeout { fail "(timeout) set variable unsigned long=1" } + } + } + -re "$prompt $" { fail "set variable unsigned long=1" } + timeout { fail "(timeout) set variable unsigned long=1" } +} + + +send "set variable v_unsigned_long=~0\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_long\n" + expect { + -re ".\[0-9\]* = $ulong_minus_1.*$prompt $" { pass "set variable unsigned long=~0 (minus)" } + -re "$prompt $" { fail "set variable unsigned long=~0 (minus)" } + timeout { fail "(timeout) set variable unsigned long=~0 (minus)" } + } + } + -re "$prompt $" { fail "set variable unsigned long=~0 (minus)" } + timeout { fail "(timeout) set variable unsigned long=~0 (minus)" } +} + + +# +# test "set variable" for type "float" +# +send "set variable v_float=0.0\n" +expect { + -re "$prompt $"\ + { + send "print v_float\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable float=0" } + -re "$prompt $" { fail "set variable float=0" } + timeout { fail "(timeout) set variable float=0" } + } + } + -re "$prompt $" { fail "set variable float=0" } + timeout { fail "(timeout) set variable float=0" } +} + + +send "set variable v_float=1.0\n" +expect { + -re "$prompt $"\ + { + send "print v_float\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable float=1" } + -re "$prompt $" { fail "set variable float=1" } + timeout { fail "(timeout) set variable float=1" } + } + } + -re "$prompt $" { fail "set variable float=1" } + timeout { fail "(timeout) set variable float=1" } +} + + +send "set variable v_float=-1.0\n" +expect { + -re "$prompt $"\ + { + send "print v_float\n" + expect { + -re ".\[0-9\]* = -1.*$prompt $" { pass "set variable float=-1 (minus)" } + -re "$prompt $" { fail "set variable float=-1 (minus)" } + timeout { fail "(timeout) set variable signed float=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable float=-1 (minus)" } + timeout { fail "(timeout) set variable float=-1 (minus)" } +} + + +# +# test "set variable" for type "double" +# +send "set variable v_double=0.0\n" +expect { + -re "$prompt $"\ + { + send "print v_double\n" + expect { + -re ".\[0-9\]* = 0.*$prompt $" { pass "set variable double=0" } + -re "$prompt $" { fail "set variable double=0" } + timeout { fail "(timeout) set variable double=0" } + } + } + -re "$prompt $" { fail "set variable double=0" } + timeout { fail "(timeout) set variable double=0" } +} + + +send "set variable v_double=1.0\n" +expect { + -re "$prompt $"\ + { + send "print v_double\n" + expect { + -re ".\[0-9\]* = 1.*$prompt $" { pass "set variable double=1" } + -re "$prompt $" { fail "set variable double=1" } + timeout { fail "(timeout) set variable double=1" } + } + } + -re "$prompt $" { fail "set variable double=1" } + timeout { fail "(timeout) set variable double=1" } +} + + +send "set variable v_double=-1.0\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_double\n" + expect { + -re "print.*.\[0-9\]* = -1.*$prompt $" { pass "set variable double=-1 (minus)" } + -re "$prompt $" { fail "set variable double=-1 (minus)" } + timeout { fail "(timeout) set variable double=-1 (minus)" } + } + } + -re "$prompt $" { fail "set variable double=-1 (minus)" } + timeout { fail "(timeout) set variable double=-1 (minus)" } +} + + +# +# test "set variable" for "char array[2]" +# +send "set variable v_char_array\[0\]='h'\n" +expect -re "$prompt $" +send "set variable v_char_array\[1\]='i'\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_char_array\n" + expect { + -re "print.*.\[0-9\]* =.*\"hi\".*$prompt $" { pass "set variable char array=\"hi\" (string)" } + -re "$prompt $" { fail "set variable char array=\"hi\" (string)" } + timeout { fail "(timeout) set variable char array=\"hi\" (string)" } + } + } + -re "$prompt $" { fail "set variable char array=\"hi\" (string)" } + timeout { fail "(timeout) set variable char array=\"hi\" (string)" } +} + + +# +# test "set variable" for "signed char array[2]" +# +send "set variable v_signed_char_array\[0\]='h'\n" +expect -re "$prompt $" +send "set variable v_signed_char_array\[1\]='i'\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_signed_char_array\n" + expect { + -re "print.*.\[0-9\]* =.*\"hi\".*$prompt $" { pass "set variable signed char array=\"hi\" (string)" } + -re "$prompt $" { fail "set variable signed char array=\"hi\" (string)" } + timeout { fail "(timeout) set variable signed char array=\"hi\" (string)" } + } + } + -re "$prompt $" { fail "set variable signed char array=\"hi\" (string)" } + timeout { fail "(timeout) set variable signed char array=\"hi\" (string)" } +} + + +# +# test "set variable" for "unsigned char array[2]" +# +send "set variable v_unsigned_char_array\[0\]='h'\n" +expect -re "$prompt $" +send "set variable v_unsigned_char_array\[1\]='i'\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_unsigned_char_array\n" + expect { + -re "print.*.\[0-9\]* =.*\"hi\".*$prompt $" { pass "set variable unsigned char array=\"hi\" (string)" } + -re "$prompt $" { fail "set variable unsigned char array=\"hi\" (string)" } + timeout { fail "(timeout) set variable unsigned char array=\"hi\" (string)" } + } + } + -re "$prompt $" { fail "set variable unsigned char array=\"hi\" (string)" } + timeout { fail "(timeout) set variable unsigned char array=\"hi\" (string)" } +} + + +# +# test "set variable" for "short array[2]" +# +send "set variable v_short_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_short_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_short_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable short array" } + -re "$prompt $" { fail "set variable short array" } + timeout { fail "(timeout) set variable short array" } + } + } + -re "$prompt $" { fail "set variable short array" } + timeout { fail "(timeout) set variable short array" } +} + + +# +# test "set variable" for "signed short array[2]" +# +send "set variable v_signed_short_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_signed_short_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_signed_short_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable signed short array" } + -re "$prompt $" { fail "set variable signed short array" } + timeout { fail "(timeout) set variable signed short array" } + } + } + -re "$prompt $" { fail "set variable signed short array" } + timeout { fail "(timeout) set variable signed short array" } +} + + +# +# test "set variable" for "unsigned short array[2]" +# +send "set variable v_unsigned_short_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_unsigned_short_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_unsigned_short_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*65080\}.*$prompt $" { pass "set variable unsigned short array" } + -re "$prompt $" { fail "set variable unsigned short array" } + timeout { fail "(timeout) set variable unsigned short array" } + } + } + -re "$prompt $" { fail "set variable unsigned short array" } + timeout { fail "(timeout) set variable unsigned short array" } +} + + +# +# test "set variable" for "int array[2]" +# +send "set variable v_int_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_int_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_int_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable int array" } + -re "$prompt $" { fail "set variable int array" } + timeout { fail "(timeout) set variable int array" } + } + } + -re "$prompt $" { fail "set variable int array" } + timeout { fail "(timeout) set variable int array" } +} + + +# +# test "set variable" for "signed int array[2]" +# +send "set variable v_signed_int_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_signed_int_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_signed_int_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable signed int array" } + -re "$prompt $" { fail "set variable signed int array" } + timeout { fail "(timeout) set variable signed int array" } + } + } + -re "$prompt $" { fail "set variable signed int array" } + timeout { fail "(timeout) set variable signed int array" } +} + + + +# +# test "set variable" for "unsigned int array[2]" +# +send "set variable v_unsigned_int_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_unsigned_int_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_unsigned_int_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*4294966840\}.*$prompt $" { pass "set variable unsigned int array" } + -re "$prompt $" { fail "set variable unsigned int array" } + timeout { fail "(timeout) set variable unsigned int array" } + } + } + -re "$prompt $" { fail "set variable unsigned int array" } + timeout { fail "(timeout) set variable unsigned int array" } +} + + +# +# test "set variable" for "long array[2]" +# +send "set variable v_long_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_long_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_long_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable long array" } + -re "$prompt $" { fail "set variable long array" } + timeout { fail "(timeout) set variable long array" } + } + } + -re "$prompt $" { fail "set variable long array" } + timeout { fail "(timeout) set variable long array" } +} + + +# +# test "set variable" for "signed long array[2]" +# +send "set variable v_signed_long_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_signed_long_array\[1\]=-456\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_signed_long_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable signed long array" } + -re "$prompt $" { fail "set variable signed long array" } + timeout { fail "(timeout) set variable signed long array" } + } + } + -re "$prompt $" { fail "set variable signed long array" } + timeout { fail "(timeout) set variable signed long array" } +} + + + +# +# test "set variable" for "unsigned long array[2]" +# +send "set variable v_unsigned_long_array\[0\]=123\n" +expect -re "$prompt $" +send "set variable v_unsigned_long_array\[1\]=-456\n" +expect { + -re "$prompt $"\ + { + send "print v_unsigned_long_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*$ulong_minus_456\}.*$prompt $" { pass "set variable unsigned long array" } + -re "$prompt $" { fail "set variable unsigned long array" } + timeout { fail "(timeout) set variable unsigned long array" } + } + } + -re "$prompt $" { fail "set variable unsigned long array" } + timeout { fail "(timeout) set variable unsigned long array" } +} + + +# +# test "set variable" for "float array[2]" +# +send "set variable v_float_array\[0\]=123.0\n" +expect -re "$prompt $" +send "set variable v_float_array\[1\]=-456.0\n" +expect { + -re "$prompt $"\ + { + send "print v_float_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable float array" } + -re "$prompt $" { fail "set variable float array" } + timeout { fail "(timeout) set variable float array" } + } + } + -re "$prompt $" { fail "set variable float array" } + timeout { fail "(timeout) set variable float array" } +} + + +# +# test "set variable" for "double array[2]" +# +send "set variable v_double_array\[0\]=123.0\n" +expect -re "$prompt $" +send "set variable v_double_array\[1\]=-456.0\n" +expect { + -re "$prompt $"\ + { + send "print v_double_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { pass "set variable double array" } + -re "$prompt $" { fail "set variable double array" } + timeout { fail "(timeout) set variable double array" } + } + } + -re "$prompt $" { fail "set variable double array" } + timeout { fail "(timeout) set variable double array" } +} + + +# +# test "set variable" for type "char *" +# +send "set v_char_pointer=v_char_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_char_pointer)='h'\n" +expect -re "set.*$prompt $" +send "set variable *(v_char_pointer+1)='i'\n" +expect { + -re "set.*$prompt $" { + send "print v_char_array\n" + expect { + -re "print.*.\[0-9\]* =.*\"hi\".*$prompt $" { + send "print *(v_char_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = 105 \'i\'.*$prompt $" { pass "set variable char pointer=\"hi\" (string)" } + -re "$prompt $" { fail "set variable char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable char pointer=\"hi\" (string)" } + + } + } + -re "$prompt $" { fail "set variable char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable char pointer=\"hi\" (string)" } + } + } + -re "$prompt $" { fail "set variable char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable char pointer=\"hi\" (string)" } +} + + +# +# test "set variable" for type "signed char *" +# +send "set v_signed_char_pointer=v_signed_char_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_char_pointer)='h'\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_char_pointer+1)='i'\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_char_array\n" + expect { + -re "print.*.\[0-9\]* =.*\"hi\".*$prompt $" { + send "print *(v_signed_char_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = 105 \'i\'.*$prompt $" { pass "set variable signed char pointer=\"hi\" (string)" } + -re "$prompt $" { fail "set variable signed char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable signed char pointer=\"hi\" (string)" } + + } + } + -re "$prompt $" { fail "set variable signed char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable signed char pointer=\"hi\" (string)" } + } + } + -re "$prompt $" { fail "set variable signed char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable signed char pointer=\"hi\" (string)" } +} + + +# +# test "set variable" for type "unsigned char *" +# +send "set v_unsigned_char_pointer=v_unsigned_char_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_char_pointer)='h'\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_char_pointer+1)='i'\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_char_array\n" + expect { + -re "print.*.\[0-9\]* =.*\"hi\".*$prompt $" { + send "print *(v_unsigned_char_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = 105 \'i\'.*$prompt $" { pass "set variable unsigned char pointer=\"hi\" (string)" } + -re "$prompt $" { fail "set variable unsigned char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable unsigned char pointer=\"hi\" (string)" } + + } + } + -re "$prompt $" { fail "set variable unsigned char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable unsigned char pointer=\"hi\" (string)" } + } + } + -re "$prompt $" { fail "set variable unsigned char pointer=\"hi\" (string)" } + timeout { fail "(timeout) set variable unsigned char pointer=\"hi\" (string)" } +} + + +# +# test "set variable" for type "short *" +# +send "set v_short_pointer=v_short_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_short_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_short_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_short_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_short_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = -456.*$prompt $" { pass "set variable short pointer" } + -re "$prompt $" { fail "set variable short pointer" } + timeout { fail "(timeout) set variable short pointer" } + + } + } + -re "$prompt $" { fail "set variable short pointer" } + timeout { fail "(timeout) set variable short pointer" } + } + } + -re "$prompt $" { fail "set variable short pointer" } + timeout { fail "(timeout) set variable short pointer" } +} + + +# +# test "set variable" for type "signed short *" +# +send "set v_signed_short_pointer=v_signed_short_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_short_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_short_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_short_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_signed_short_pointer+1)\n" + expect { + -re "print.*.\[0-9\]*.*=.*-456.*$prompt $" { pass "set variable signed short pointer" } + -re "$prompt $" { fail "set variable signed short pointer (FIXME)" } + timeout { fail "(timeout) set variable signed short pointer (FIXME)" } + + } + } + -re "$prompt $" { fail "set variable signed short pointer (FIXME)" } + timeout { fail "(timeout) set variable signed short pointer (FIXME)" } + } + } + -re "$prompt $" { fail "set variable signed short pointer (FIXME)" } + timeout { fail "(timeout) set variable signed short pointer (FIXME)" } +} + + +# +# test "set variable" for type "unsigned short *" +# +send "set v_unsigned_short_pointer=v_unsigned_short_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_short_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_short_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_short_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*65080\}.*$prompt $" { + send "print *(v_unsigned_short_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = 65080.*$prompt $" { pass "set variable unsigned short pointer" } + -re "$prompt $" { fail "set variable unsigned short pointer (FIXME)" } + timeout { fail "(timeout) set variable unsigned short pointer (FIXME)" } + + } + } + -re "$prompt $" { fail "set variable unsigned short pointer (FIXME)" } + timeout { fail "(timeout) set variable unsigned short pointer (FIXME)" } + } + } + -re "$prompt $" { fail "set variable unsigned short pointer (FIXME)" } + timeout { fail "(timeout) set variable unsigned short pointer (FIXME)" } +} + + +# +# test "set variable" for type "int *" +# +send "set v_int_pointer=v_int_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_int_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_int_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_int_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_int_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = -456.*$prompt $" { pass "set variable int pointer" } + -re "$prompt $" { fail "set variable int pointer" } + timeout { fail "(timeout) set variable int pointer" } + + } + } + -re "$prompt $" { fail "set variable int pointer" } + timeout { fail "(timeout) set variable int pointer" } + } + } + -re "$prompt $" { fail "set variable int pointer" } + timeout { fail "(timeout) set variable int pointer" } +} + + +# +# test "set variable" for type "signed int *" +# +send "set v_signed_int_pointer=v_signed_int_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_int_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_int_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_int_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_signed_int_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = -456.*$prompt $" { pass "set variable signed int pointer" } + -re "$prompt $" { fail "set variable signed int pointer" } + timeout { fail "(timeout) set variable signed int pointer" } + + } + } + -re "$prompt $" { fail "set variable signed int pointer" } + timeout { fail "(timeout) set variable signed int pointer" } + } + } + -re "$prompt $" { fail "set variable signed int pointer" } + timeout { fail "(timeout) set variable signed int pointer" } +} + + +# +# test "set variable" for type "unsigned int *" +# +send "set v_unsigned_int_pointer=v_unsigned_int_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_int_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_int_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_int_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*4294966840\}.*$prompt $" { + send "print *(v_unsigned_int_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = 4294966840.*$prompt $" { pass "set variable unsigned int pointer" } + -re "$prompt $" { fail "set variable unsigned int pointer" } + timeout { fail "(timeout) set variable unsigned int pointer" } + + } + } + -re "$prompt $" { fail "set variable unsigned int pointer" } + timeout { fail "(timeout) set variable unsigned int pointer" } + } + } + -re "$prompt $" { fail "set variable unsigned int pointer" } + timeout { fail "(timeout) set variable unsigned int pointer" } +} + + +# +# test "set variable" for type "long *" +# +send "set v_long_pointer=v_long_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_long_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_long_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_long_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_long_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = -456.*$prompt $" { pass "set variable long pointer" } + -re "$prompt $" { fail "set variable long pointer" } + timeout { fail "(timeout) set variable long pointer" } + + } + } + -re "$prompt $" { fail "set variable long pointer" } + timeout { fail "(timeout) set variable long pointer" } + } + } + -re "$prompt $" { fail "set variable long pointer" } + timeout { fail "(timeout) set variable long pointer" } +} + + +# +# test "set variable" for type "signed long *" +# +send "set v_signed_long_pointer=v_signed_long_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_long_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_signed_long_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_signed_long_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_signed_long_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = -456.*$prompt $" { pass "set variable signed long pointer" } + -re "$prompt $" { fail "set variable signed long pointer" } + timeout { fail "(timeout) set variable signed long pointer" } + + } + } + -re "$prompt $" { fail "set variable signed long pointer" } + timeout { fail "(timeout) set variable signed long pointer" } + } + } + -re "$prompt $" { fail "set variable signed long pointer" } + timeout { fail "(timeout) set variable signed long pointer" } +} + + +# +# test "set variable" for type "unsigned long *" +# +send "set v_unsigned_long_pointer=v_unsigned_long_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_long_pointer)=123\n" +expect -re "set.*$prompt $" +send "set variable *(v_unsigned_long_pointer+1)=-456\n" +expect { + -re "set.*$prompt $" { + send "print v_unsigned_long_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*$ulong_minus_456\}.*$prompt $" { + send "print *(v_unsigned_long_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = $ulong_minus_456.*$prompt $" { pass "set variable unsigned long pointer" } + -re "$prompt $" { fail "set variable unsigned long pointer" } + timeout { fail "(timeout) set variable unsigned long pointer" } + + } + } + -re "$prompt $" { fail "set variable unsigned long pointer" } + timeout { fail "(timeout) set variable unsigned long pointer" } + } + } + -re "$prompt $" { fail "set variable unsigned long pointer" } + timeout { fail "(timeout) set variable unsigned long pointer" } +} + + +# +# test "set variable" for type "float *" +# +send "set v_float_pointer=v_float_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_float_pointer)=123.0\n" +expect -re "set.*$prompt $" +send "set variable *(v_float_pointer+1)=-456.0\n" +expect { + -re "set.*$prompt $" { + send "print v_float_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_float_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = -456.*$prompt $" { pass "set variable float pointer" } + -re "$prompt $" { fail "set variable float pointer" } + timeout { fail "(timeout) set variable float pointer" } + + } + } + -re "$prompt $" { fail "set variable float pointer" } + timeout { fail "(timeout) set variable float pointer" } + } + } + -re "$prompt $" { fail "set variable float pointer" } + timeout { fail "(timeout) set variable float pointer" } +} + + +# +# test "set variable" for type "double *" +# +send "set v_double_pointer=v_double_array\n" +expect -re "set.*$prompt $" +send "set variable *(v_double_pointer)=123.0\n" +expect -re "set.*$prompt $" +send "set variable *(v_double_pointer+1)=-456.0\n" +expect { + -re "set.*$prompt $" { + send "print v_double_array\n" + expect { + -re "print.*.\[0-9\]* =.*\{123,.*-456\}.*$prompt $" { + send "print *(v_double_pointer+1)\n" + expect { + -re "print.*.\[0-9\]* = -456.*$prompt $" { pass "set variable double pointer" } + -re "$prompt $" { fail "set variable double pointer" } + timeout { fail "(timeout) set variable double pointer" } + + } + } + -re "$prompt $" { fail "set variable double pointer" } + timeout { fail "(timeout) set variable double pointer" } + } + } + -re "$prompt $" { fail "set variable double pointer" } + timeout { fail "(timeout) set variable double pointer" } +} + + +# +# test "set variable" for struct members +# +send "set variable v_struct1.v_char_member='h'\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_struct1.v_char_member\n" + expect { + -re "print.*.\[0-9\]* = 104 \'h\'.*$prompt $" { pass "set variable structure char member" } + -re "$prompt $" { fail "set variable structure char member" } + timeout { fail "(timeout) set variable structure char member" } + } + } + -re "$prompt $" { fail "set variable structure char member" } + timeout { fail "(timeout) set variable structure char member" } +} + + +send "set variable v_struct1.v_short_member=1\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_struct1.v_short_member\n" + expect { + -re "print.*.\[0-9\]* = 1.*$prompt $" { pass "set variable structure short member" } + -re "$prompt $" { fail "set variable structure short member" } + timeout { fail "(timeout) set variable structure short member" } + } + } + -re "$prompt $" { fail "set variable structure short member" } + timeout { fail "(timeout) set variable structure short member" } +} + + +send "set variable v_struct1.v_int_member=2\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_struct1.v_int_member\n" + expect { + -re "print.*.\[0-9\]* = 2.*$prompt $" { pass "set variable structure int member" } + -re "$prompt $" { fail "set variable structure int member" } + timeout { fail "(timeout) set variable structure int member" } + } + } + -re "$prompt $" { fail "set variable structure int member" } + timeout { fail "(timeout) set variable structure int member" } +} + + +send "set variable v_struct1.v_long_member=3\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_struct1.v_long_member\n" + expect { + -re "print.*.\[0-9\]* = 3.*$prompt $" { pass "set variable structure long member" } + -re "$prompt $" { fail "set variable structure long member" } + timeout { fail "(timeout) set variable structure long member" } + } + } + -re "$prompt $" { fail "set variable structure long member" } + timeout { fail "(timeout) set variable structure long member" } +} + + +send "set variable v_struct1.v_float_member=4.0\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_struct1.v_float_member\n" + expect { + -re "print.*.\[0-9\]* = 4.*$prompt $" { pass "set variable structure float member" } + -re "$prompt $" { fail "set variable structure float member" } + timeout { fail "(timeout) set variable structure float member" } + } + } + -re "$prompt $" { fail "set variable structure float member" } + timeout { fail "(timeout) set variable structure float member" } +} + + +send "set variable v_struct1.v_double_member=5.0\n" +expect { + -re "set.*$prompt $"\ + { + send "print v_struct1.v_double_member\n" + expect { + -re "print.*.\[0-9\]* = 5.*$prompt $" { pass "set variable structure double member" } + -re "$prompt $" { fail "set variable structure double member" } + timeout { fail "(timeout) set variable structure double member" } + } + } + -re "$prompt $" { fail "set variable structure double member" } + timeout { fail "(timeout) set variable structure double member" } +} + + + +send "print v_struct1\n" +expect { + -re "print.*.\[0-9\]* = \{.*v_char_member = 104 \'h\',.*v_short_member = 1,.*v_int_member = 2,.*\ +v_long_member = 3,.*v_float_member = 4,.*v_double_member = 5.*\}.*$prompt $"\ + { pass "set print structure" } + -re "$prompt $" { fail "set print structure" } + timeout { fail "(timeout) set print structure" } +} + +if [istarget "a29k-*-udi"] then { + # FIXME: If PR 2415 is fixed, this is not needed. + gdb_target_udi +} diff --git a/gdb/testsuite/gdb.base/sparc-aout.u b/gdb/testsuite/gdb.base/sparc-aout.u new file mode 100644 index 0000000..8b4eef9 --- /dev/null +++ b/gdb/testsuite/gdb.base/sparc-aout.u @@ -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 diff --git a/gdb/testsuite/gdb.base/sparc-elf.u b/gdb/testsuite/gdb.base/sparc-elf.u new file mode 100644 index 0000000..9320c0f --- /dev/null +++ b/gdb/testsuite/gdb.base/sparc-elf.u @@ -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 diff --git a/gdb/testsuite/gdb.base/term.exp b/gdb/testsuite/gdb.base/term.exp new file mode 100644 index 0000000..84d60e3 --- /dev/null +++ b/gdb/testsuite/gdb.base/term.exp @@ -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" } +} + + diff --git a/gdb/testsuite/gdb.base/twice.c b/gdb/testsuite/gdb.base/twice.c new file mode 100644 index 0000000..dd12c06 --- /dev/null +++ b/gdb/testsuite/gdb.base/twice.c @@ -0,0 +1,16 @@ +int nothing () + +{ + int x = 3 ; + return x ; +} + + +main () + +{ + int y ; + + y = nothing () ; + printf ("hello\n") ; +} diff --git a/gdb/testsuite/gdb.base/types.c b/gdb/testsuite/gdb.base/types.c new file mode 100644 index 0000000..e22a68b --- /dev/null +++ b/gdb/testsuite/gdb.base/types.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/watchpoint.c b/gdb/testsuite/gdb.base/watchpoint.c new file mode 100644 index 0000000..edb996d --- /dev/null +++ b/gdb/testsuite/gdb.base/watchpoint.c @@ -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; +} diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp new file mode 100644 index 0000000..ddb3dae --- /dev/null +++ b/gdb/testsuite/gdb.base/watchpoint.exp @@ -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 +} diff --git a/gdb/testsuite/gdb.base/whatis-info.c b/gdb/testsuite/gdb.base/whatis-info.c new file mode 100644 index 0000000..8744210 --- /dev/null +++ b/gdb/testsuite/gdb.base/whatis-info.c @@ -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 diff --git a/gdb/testsuite/gdb.base/whatis.c b/gdb/testsuite/gdb.base/whatis.c new file mode 100644 index 0000000..ca50c06 --- /dev/null +++ b/gdb/testsuite/gdb.base/whatis.c @@ -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; +} |