diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2009-07-31 15:38:16 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2009-07-31 15:38:16 +0000 |
commit | 1ea342040ca8c774d97173848e69cf910d1c2e48 (patch) | |
tree | cf6eea91b289006c859f516726056a22d6b67bd7 | |
parent | ff1a52c620029dc07c557feb21eb84550a7968ed (diff) | |
download | gdb-1ea342040ca8c774d97173848e69cf910d1c2e48.zip gdb-1ea342040ca8c774d97173848e69cf910d1c2e48.tar.gz gdb-1ea342040ca8c774d97173848e69cf910d1c2e48.tar.bz2 |
* configure.ac: Run gdb.cell tests when appropriate.
* configure: Regenerate.
* lib/cell.exp: New file.
* gdb.cell: New directory.
* gdb.cell/configure.ac: New file.
* gdb.cell/configure: New file.
* gdb.cell/Makefile.in: New file.
* gdb.cell/arch.exp: New file.
* gdb.cell/break.c: New file.
* gdb.cell/break.exp: New file.
* gdb.cell/break-spu.c: New file.
* gdb.cell/bt.c: New file.
* gdb.cell/bt2-spu.c: New file.
* gdb.cell/bt-spu.c: New file.
* gdb.cell/bt.exp: New file.
* gdb.cell/coremaker.c: New file.
* gdb.cell/coremaker-spu.c: New file.
* gdb.cell/core.exp: New file.
* gdb.cell/gcore.exp: New file.
* gdb.cell/data.c: New file.
* gdb.cell/data.exp: New file.
* gdb.cell/data-spu.c: New file.
* gdb.cell/ea-cache.exp: New file.
* gdb.cell/ea-cache.c: New file.
* gdb.cell/ea-cache-spu.c: New file.
* gdb.cell/ea-standalone.c: New file.
* gdb.cell/ea-standalone.exp: New file.
* gdb.cell/ea-test.c: New file.
* gdb.cell/ea-test.exp: New file.
* gdb.cell/f-regs.exp: New file.
* gdb.cell/mem-access.c: New file.
* gdb.cell/mem-access.exp: New file.
* gdb.cell/mem-access-spu.c: New file.
* gdb.cell/ptype.exp: New file.
* gdb.cell/registers.exp: New file.
* gdb.cell/size.c: New file.
* gdb.cell/sizeof.exp: New file.
* gdb.cell/size-spu.c: New file.
* gdb.cell/solib.exp: New file.
* gdb.cell/solib-symbol.exp: New file.
39 files changed, 4999 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index f57c8ce..d1e38f3 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,48 @@ 2009-07-31 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + * configure.ac: Run gdb.cell tests when appropriate. + * configure: Regenerate. + * lib/cell.exp: New file. + * gdb.cell: New directory. + * gdb.cell/configure.ac: New file. + * gdb.cell/configure: New file. + * gdb.cell/Makefile.in: New file. + * gdb.cell/arch.exp: New file. + * gdb.cell/break.c: New file. + * gdb.cell/break.exp: New file. + * gdb.cell/break-spu.c: New file. + * gdb.cell/bt.c: New file. + * gdb.cell/bt2-spu.c: New file. + * gdb.cell/bt-spu.c: New file. + * gdb.cell/bt.exp: New file. + * gdb.cell/coremaker.c: New file. + * gdb.cell/coremaker-spu.c: New file. + * gdb.cell/core.exp: New file. + * gdb.cell/gcore.exp: New file. + * gdb.cell/data.c: New file. + * gdb.cell/data.exp: New file. + * gdb.cell/data-spu.c: New file. + * gdb.cell/ea-cache.exp: New file. + * gdb.cell/ea-cache.c: New file. + * gdb.cell/ea-cache-spu.c: New file. + * gdb.cell/ea-standalone.c: New file. + * gdb.cell/ea-standalone.exp: New file. + * gdb.cell/ea-test.c: New file. + * gdb.cell/ea-test.exp: New file. + * gdb.cell/f-regs.exp: New file. + * gdb.cell/mem-access.c: New file. + * gdb.cell/mem-access.exp: New file. + * gdb.cell/mem-access-spu.c: New file. + * gdb.cell/ptype.exp: New file. + * gdb.cell/registers.exp: New file. + * gdb.cell/size.c: New file. + * gdb.cell/sizeof.exp: New file. + * gdb.cell/size-spu.c: New file. + * gdb.cell/solib.exp: New file. + * gdb.cell/solib-symbol.exp: New file. + +2009-07-31 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + * gdb.xml/tdesc-regs.exp: Skip for SPU targets. 2009-07-28 Daniel Jacobowitz <dan@codesourcery.com> diff --git a/gdb/testsuite/configure b/gdb/testsuite/configure index 5b57101..675a481 100755 --- a/gdb/testsuite/configure +++ b/gdb/testsuite/configure @@ -273,6 +273,7 @@ PACKAGE_BUGREPORT= ac_unique_file="gdb.base" ac_subdirs_all="$ac_subdirs_all gdb.hp" +ac_subdirs_all="$ac_subdirs_all gdb.cell" ac_subdirs_all="$ac_subdirs_all gdb.stabs" ac_subdirs_all="$ac_subdirs_all gdb.gdbtk" # Factoring default headers for most tests. @@ -1541,6 +1542,26 @@ subdirs="$subdirs gdb.hp" ;; esac +# Add Cell/B.E. specific tests when appropriate. +# We need support for both PowerPC and SPU targets configured in. +case $target in + powerpc*-*-linux*) + have_spu_target=no + for targ in `echo $enable_targets | sed 's/,/ /g'` + do + case "${targ}" in + spu*|all) have_spu_target=yes ;; + esac + done + if test x$have_spu_target = xyes; then + + +subdirs="$subdirs gdb.cell" + + fi + ;; +esac + # With stabs. # Check whether --with-stabs or --without-stabs was given. diff --git a/gdb/testsuite/configure.ac b/gdb/testsuite/configure.ac index 80d89aa..a9d63cb 100644 --- a/gdb/testsuite/configure.ac +++ b/gdb/testsuite/configure.ac @@ -43,6 +43,23 @@ case $target in AC_CONFIG_SUBDIRS(gdb.hp) ;; esac +# Add Cell/B.E. specific tests when appropriate. +# We need support for both PowerPC and SPU targets configured in. +case $target in + powerpc*-*-linux*) + have_spu_target=no + for targ in `echo $enable_targets | sed 's/,/ /g'` + do + case "${targ}" in + spu*|all) have_spu_target=yes ;; + esac + done + if test x$have_spu_target = xyes; then + AC_CONFIG_SUBDIRS(gdb.cell) + fi + ;; +esac + # With stabs. AC_ARG_WITH(stabs, [ --with-stabs arrange to use stabs instead of host debug format],, diff --git a/gdb/testsuite/gdb.cell/Makefile.in b/gdb/testsuite/gdb.cell/Makefile.in new file mode 100644 index 0000000..a0d0d78 --- /dev/null +++ b/gdb/testsuite/gdb.cell/Makefile.in @@ -0,0 +1,20 @@ +VPATH = @srcdir@ +srcdir = @srcdir@ + +EXECUTABLES = break bt coremaker data mem-access size + +SPU_EXECUTABLES = break-spu bt-spu bt2-spu coremaker-spu data-spu \ + ea-cache-spu ea-standalone ea-test mem-access-spu size-spu + +all info install-info dvi install uninstall installcheck check: + @echo "Nothing to be done for $@..." + +clean mostlyclean: + -rm -f *~ *.o a.out core corefile gcore.test + -rm -f $(EXECUTABLES) $(SPU_EXECUTABLES) + +distclean maintainer-clean realclean: clean + -rm -f *~ core + -rm -f Makefile config.status config.log + -rm -f *-init.exp + -rm -fr *.log summary detail *.plog *.sum *.psum site.* diff --git a/gdb/testsuite/gdb.cell/arch.exp b/gdb/testsuite/gdb.cell/arch.exp new file mode 100644 index 0000000..e1f8948 --- /dev/null +++ b/gdb/testsuite/gdb.cell/arch.exp @@ -0,0 +1,116 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcase checks if the "show architecture" command works properly. + +load_lib cell.exp + +set ppu_file "break" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "break-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +# No programm running, default architecture should be powerpc:common. +gdb_test "show architecture" \ + "The target architecture is set automatically.*currently powerpc:common.*" \ + "startup architecture is powerpc:common" + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# In PPU thread, architecture should be powerpc:common. +gdb_test "show architecture" \ + "The target architecture is set automatically.*currently powerpc:common.*" \ + "ppu architecture is powerpc:common" + +# Switch to SPU thread. +cont_spu_main +check_spu_arch "" + +# Remember thread ID of first thread to hit SPU main. +send_gdb "thread\n" +gdb_expect 10 { + -re "Current thread is (\[0-9\]*) .*\r\n$gdb_prompt $" { + pass "Retrieve current thread" + set thread_id $expect_out(1,string) + } + -re "$gdb_prompt $" { + fail "Retrieve current thread" + return 0 + } + timeout { + fail "Retrieve current thread (timed out)" + return 0 + } +} + +# Stress Test: Switching from PPU- to SPU-Thread and back 'rep' times. +set rep 100 +for {set i 0} {$i < $rep} {incr i} { + # Switch to PPU Thread. + gdb_test "t 1" \ + "Switching to thread 1.*" \ + "switch back to thread 1 (PPU) #$i" + # In PPU Thread, architecture should again be powerpc:common. + gdb_test "show architecture" \ + "The target architecture is set automatically.*currently powerpc:common.*" \ + "ppu architecture is powerpc:common again #$i" + # Thread switching to SPU. + gdb_test "t $thread_id" \ + "Switching to thread $thread_id.*at.*$spu_file.c.*" \ + "switch back to thread $thread_id (spu) #$i" + # Standing in SPU thread again, architecture should be spu:256K again. + check_spu_arch "spu architecture is spu256K again #$i" +} +# End of Stress Test loop + +gdb_exit + +return 0 diff --git a/gdb/testsuite/gdb.cell/break-spu.c b/gdb/testsuite/gdb.cell/break-spu.c new file mode 100644 index 0000000..065f4fd --- /dev/null +++ b/gdb/testsuite/gdb.cell/break-spu.c @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> + +void foo (void); + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + int i; + + printf ("Hello World! from spu\n"); + + i = 5; + foo (); + printf ("i = %d\n", i); + + return 0; +} + +void +foo (void) +{ + printf ("in foo\n"); +} diff --git a/gdb/testsuite/gdb.cell/break.c b/gdb/testsuite/gdb.cell/break.c new file mode 100644 index 0000000..79de6e4 --- /dev/null +++ b/gdb/testsuite/gdb.cell/break.c @@ -0,0 +1,71 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <libspe2.h> +#include <pthread.h> +#include <sys/wait.h> + +extern spe_program_handle_t break_spu; +#define nr_t 5 + +void * +spe_thread (void * arg) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg; + + spe_program_load (*ctx, &break_spu); + spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL); + + pthread_exit (NULL); +} + +int +main (void) +{ + int thread_id[nr_t]; + pthread_t pts[nr_t]; + spe_context_ptr_t ctx[nr_t]; + int value = 1; + int cnt; + + for (cnt = 0; cnt < nr_t; cnt++) + { + ctx[cnt] = spe_context_create (0, NULL); + thread_id[cnt] + = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]); + } + + for (cnt = 0; cnt < nr_t; cnt++) + pthread_join (pts[cnt], NULL); + + for (cnt = 0; cnt < nr_t; cnt++) + spe_context_destroy (ctx[cnt]); + + return 0; +} + +void +foo () +{ + printf ("foo in break\n"); + return; +} diff --git a/gdb/testsuite/gdb.cell/break.exp b/gdb/testsuite/gdb.cell/break.exp new file mode 100644 index 0000000..c7bc0ed --- /dev/null +++ b/gdb/testsuite/gdb.cell/break.exp @@ -0,0 +1,103 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcases tests setting and deleting breakpoints on PPU and SPU. + +load_lib cell.exp + +set testfile "break" +set ppu_file "break" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "break-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +# Delete breakpoints before starting the application. The debugger +# shouldn't prompt for anything. +gdb_test "delete breakpoints" \ + "" \ + "No prompt when deleting non-existing breakpoints" + +gdb_test "break main" \ + "Breakpoint.*at.* file .*$testfile.c, line.*" \ + "breakpoint main in ppu" + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +delete_breakpoints + +# Re-set breakpoint at main in PPU binary. +gdb_test "break main" \ + "Breakpoint.*at.* file .*$testfile.c, line.*" \ + "breakpoint function" + +# Set breakpoint in SPU binary. +send_gdb "break $spu_file.c:10\n" +gdb_expect { + -re ".*$spu_file.c.*Make breakpoint pending.*y or \\\[n\\\]. $" { + gdb_test "y" "Breakpoint.*$spu_file.*pending." "set pending breakpoint" + } + timeout { fail "Timeout while setting breakpoint in spu binary" } +} + +# Check breakpoints. +gdb_test "info break" \ + "Num\[ \]+Type\[ \]+Disp\[ \]+Enb\[ \]+Address\[ \]+What.* +\[0-9\]+\[\t \]+breakpoint keep y.*in main at.*$testfile.c.* +\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*$spu_file.c:10.*" \ + "breakpoint info" + +gdb_test "continue" \ + "Continuing.*Switching to Thread.*Breakpoint.*main.*at.*$spu_file.c.*" \ + "continuing to spu thread" + +gdb_exit + +return 0 diff --git a/gdb/testsuite/gdb.cell/bt-spu.c b/gdb/testsuite/gdb.cell/bt-spu.c new file mode 100644 index 0000000..a4fb639 --- /dev/null +++ b/gdb/testsuite/gdb.cell/bt-spu.c @@ -0,0 +1,30 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <sys/syscall.h> + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + __send_to_ppe (0x2111, 0, NULL); + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/bt.c b/gdb/testsuite/gdb.cell/bt.c new file mode 100644 index 0000000..e0a47cc --- /dev/null +++ b/gdb/testsuite/gdb.cell/bt.c @@ -0,0 +1,101 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <stdlib.h> +#include <libspe2.h> +#include <pthread.h> +#include <sys/wait.h> + +extern spe_program_handle_t bt_spu; +extern spe_program_handle_t bt2_spu; +#define nr_t 5 + +void * +spe_thread (void * arg) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg; + + spe_program_load (*ctx, &bt_spu); + spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL); + + pthread_exit (NULL); +} + +int +indirect_handler (unsigned char *base, unsigned long offset) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t ctx = spe_context_create (0, NULL); + + spe_program_load (ctx, &bt2_spu); + spe_context_run (ctx, &entry, flags, NULL, NULL, NULL); + + return 0; +} + +static pthread_mutex_t crash_mutex = PTHREAD_MUTEX_INITIALIZER; +static int crash_count = 0; + +int +crash_handler (unsigned char *base, unsigned long offset) +{ + int count; + + pthread_mutex_lock (&crash_mutex); + count = ++crash_count; + pthread_mutex_unlock (&crash_mutex); + + while (count < nr_t) + ; + + abort (); +} + +int +main (void) +{ + int thread_id[nr_t]; + pthread_t pts[nr_t]; + spe_context_ptr_t ctx[nr_t]; + int value = 1; + int cnt; + + spe_callback_handler_register (indirect_handler, 0x11, SPE_CALLBACK_NEW); + spe_callback_handler_register (crash_handler, 0x12, SPE_CALLBACK_NEW); + + for (cnt = 0; cnt < nr_t; cnt++) + { + ctx[cnt] = spe_context_create (0, NULL); + thread_id[cnt] + = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]); + } + + for (cnt = 0; cnt < nr_t; cnt++) + pthread_join (pts[cnt], NULL); + + for (cnt = 0; cnt < nr_t; cnt++) + spe_context_destroy (ctx[cnt]); + + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/bt.exp b/gdb/testsuite/gdb.cell/bt.exp new file mode 100644 index 0000000..428e780 --- /dev/null +++ b/gdb/testsuite/gdb.cell/bt.exp @@ -0,0 +1,90 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcases tests mixed-architecture backtrace support + +load_lib cell.exp + +set testfile "bt" +set ppu_file "bt" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "bt-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} +set spu2_file "bt2-spu" +set spu2_src ${srcdir}/${subdir}/${spu2_file}.c +set spu2_bin ${objdir}/${subdir}/${spu2_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binaries. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +if { [gdb_compile_cell_spu $spu2_src $spu2_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_cell_embedspu $spu2_bin $spu2_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o $spu2_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +gdb_test "continue" ".*Program received signal SIGABRT, Aborted.*" + +gdb_test "backtrace" ".*abort.*crash_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu2_file.c.*<cross-architecture call>.*spe_context_run.*indirect_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" + +for {set thread_id 2} {$thread_id < 7} {incr thread_id} { + gdb_test "t $thread_id" \ + "Switching to thread $thread_id.*" \ + "switch to thread $thread_id" + gdb_test "backtrace" \ + ".*crash_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu2_file.c.*<cross-architecture call>.*spe_context_run.*indirect_handler.*base.*offset.*<cross-architecture call>.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" \ + "backtrace in thread $thread_id" +} + +gdb_exit + +return 0 diff --git a/gdb/testsuite/gdb.cell/bt2-spu.c b/gdb/testsuite/gdb.cell/bt2-spu.c new file mode 100644 index 0000000..29d5148 --- /dev/null +++ b/gdb/testsuite/gdb.cell/bt2-spu.c @@ -0,0 +1,30 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <sys/syscall.h> + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + __send_to_ppe (0x2112, 0, NULL); + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/configure b/gdb/testsuite/gdb.cell/configure new file mode 100644 index 0000000..f575365 --- /dev/null +++ b/gdb/testsuite/gdb.cell/configure @@ -0,0 +1,2246 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59. +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="arch.exp" +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + +CC=${CC-cc} + +ac_aux_dir= +for ac_dir in `cd $srcdir;pwd`/../../.. $srcdir/`cd $srcdir;pwd`/../../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \`cd $srcdir;pwd\`/../../.. $srcdir/\`cd $srcdir;pwd\`/../../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in \`cd $srcdir;pwd\`/../../.. $srcdir/\`cd $srcdir;pwd\`/../../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6 +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_target_alias=$target_alias +test "x$ac_cv_target_alias" = "x" && + ac_cv_target_alias=$ac_cv_host_alias +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6 +target=$ac_cv_target +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + + ac_config_files="$ac_config_files Makefile" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then we branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +cat >confdef2opt.sed <<\_ACEOF +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +t quote +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +t quote +d +: quote +s,[ `~#$^&*(){}\\|;'"<>?],\\&,g +s,\[,\\&,g +s,\],\\&,g +s,\$,$$,g +p +_ACEOF +# We use echo to avoid assuming a particular line-breaking character. +# The extra dot is to prevent the shell from consuming trailing +# line-breaks from the sub-command output. A line-break within +# single-quotes doesn't work because, if this script is created in a +# platform that uses two characters for line-breaks (e.g., DOS), tr +# would break. +ac_LF_and_DOT=`echo; echo .` +DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` +rm -f confdef2opt.sed + + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to <bug-autoconf@gnu.org>." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CC@,$CC,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@target@,$target,;t t +s,@target_cpu@,$target_cpu,;t t +s,@target_vendor@,$target_vendor,;t t +s,@target_os@,$target_os,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/gdb/testsuite/gdb.cell/configure.ac b/gdb/testsuite/gdb.cell/configure.ac new file mode 100644 index 0000000..20195cd --- /dev/null +++ b/gdb/testsuite/gdb.cell/configure.ac @@ -0,0 +1,15 @@ +dnl Process this file file with autoconf to produce a configure script. +dnl This file is a shell script fragment that supplies the information +dnl necessary to tailor a template configure script into the configure +dnl script appropriate for this directory. For more information, check +dnl any existing configure script. + +AC_PREREQ(2.59) +AC_INIT(arch.exp) + +CC=${CC-cc} +AC_SUBST(CC) +AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/../../..) +AC_CANONICAL_SYSTEM + +AC_OUTPUT(Makefile) diff --git a/gdb/testsuite/gdb.cell/core.exp b/gdb/testsuite/gdb.cell/core.exp new file mode 100644 index 0000000..2f0c853 --- /dev/null +++ b/gdb/testsuite/gdb.cell/core.exp @@ -0,0 +1,105 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcases tests mixed-architecture core file support + +load_lib cell.exp + +set testfile "coremaker" +set ppu_file "coremaker" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "coremaker-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {![isnative]} then { + return 0 +} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +# Run program to generate a core file -- see gdb.base/corefile.exp +set found 0 +set coredir "${objdir}/${subdir}/coredir.[getpid]" +file mkdir $coredir +catch "system \"(cd ${coredir}; ulimit -c unlimited; ${ppu_bin}; true) >/dev/null 2>&1\"" +set names [glob -nocomplain -directory $coredir core.*] +if {[llength $names] == 1} { + set corefile [file join $coredir [lindex $names 0]] + remote_exec build "mv $corefile ${objdir}/${subdir}/corefile" + set found 1 +} +remote_exec build "rmdir $coredir" +if { $found == 0 } { + warning "can't generate a core file - core tests suppressed - check ulimit -c" + return 0 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +send_gdb "core-file $objdir/$subdir/corefile\n" +gdb_expect { + -re "Core was generated by .*coremaker.*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { + pass "core-file command" + } + -re "Core was generated by .*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { + pass "core-file command (with bad program name)" + } + -re ".*$gdb_prompt $" { fail "core-file command" } + timeout { fail "(timeout) core-file command" } +} + +gdb_test "backtrace" ".*abort.*main.*at.*$ppu_file.c.*" + +for {set thread_id 2} {$thread_id < 7} {incr thread_id} { + gdb_test "t $thread_id" \ + "Switching to thread $thread_id.*" \ + "switch to thread $thread_id" + gdb_test "backtrace" \ + ".*terminal_func.*factorial_func.*value=1.*factorial_func.*value=2.*factorial_func.*value=3.*factorial_func.*value=4.*factorial_func.*value=5.*factorial_func.*value=6.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" \ + "backtrace in thread $thread_id" +} + +gdb_exit + +return 0 diff --git a/gdb/testsuite/gdb.cell/coremaker-spu.c b/gdb/testsuite/gdb.cell/coremaker-spu.c new file mode 100644 index 0000000..0645e81 --- /dev/null +++ b/gdb/testsuite/gdb.cell/coremaker-spu.c @@ -0,0 +1,46 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <spu_mfcio.h> + +void +terminal_func () +{ + spu_write_out_intr_mbox (0); + spu_read_in_mbox (); +} + +int +factorial_func (int value) +{ + if (value > 1) + value *= factorial_func (value - 1); + + terminal_func (); + return value; +} + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + factorial_func (6); + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/coremaker.c b/gdb/testsuite/gdb.cell/coremaker.c new file mode 100644 index 0000000..468e3dd --- /dev/null +++ b/gdb/testsuite/gdb.cell/coremaker.c @@ -0,0 +1,63 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <stdlib.h> +#include <libspe2.h> +#include <pthread.h> +#include <sys/wait.h> + +extern spe_program_handle_t coremaker_spu; +#define nr_t 5 + +void * +spe_thread (void * arg) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg; + + spe_program_load (*ctx, &coremaker_spu); + spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL); + + pthread_exit (NULL); +} + +int +main (void) +{ + int thread_id[nr_t]; + pthread_t pts[nr_t]; + spe_context_ptr_t ctx[nr_t]; + unsigned int value; + int cnt; + + for (cnt = 0; cnt < nr_t; cnt++) + { + ctx[cnt] = spe_context_create (0, NULL); + thread_id[cnt] + = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]); + } + + for (cnt = 0; cnt < nr_t; cnt++) + spe_out_intr_mbox_read (ctx[cnt], &value, 1, SPE_MBOX_ALL_BLOCKING); + + abort (); +} + diff --git a/gdb/testsuite/gdb.cell/data-spu.c b/gdb/testsuite/gdb.cell/data-spu.c new file mode 100644 index 0000000..5f4a38b --- /dev/null +++ b/gdb/testsuite/gdb.cell/data-spu.c @@ -0,0 +1,36 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + char var_char = 'c'; + short var_short = 7; + int var_int = 1337; + long var_long = 123456; + long long var_longlong = 123456789; + float var_float = 1.23; + double var_double = 2.3456; + long double var_longdouble = 3.45678; + return 0; /* Marker SPU End */ +} + diff --git a/gdb/testsuite/gdb.cell/data.c b/gdb/testsuite/gdb.cell/data.c new file mode 100644 index 0000000..f7d9ba2 --- /dev/null +++ b/gdb/testsuite/gdb.cell/data.c @@ -0,0 +1,72 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <libspe2.h> +#include <pthread.h> +#include <sys/wait.h> + +extern spe_program_handle_t data_spu; +#define nr_t 1 + +void * +spe_thread (void *arg) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg; + + spe_program_load (*ctx, &data_spu); + spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL); + + pthread_exit (NULL); +} + +int main (void) +{ + int thread_id[nr_t]; + pthread_t pts[nr_t]; + spe_context_ptr_t ctx[nr_t]; + + int cnt; + + char var_char = 'c'; + short var_short = 7; + int var_int = 1337; + long var_long = 123456; + long long var_longlong = 123456789; + float var_float = 1.23; + double var_double = 2.3456; + long double var_longdouble = 3.45678; + + for (cnt = 0; cnt < nr_t; cnt++) + { + ctx[cnt] = spe_context_create(0, NULL); + thread_id[cnt] + = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]); + } + + for (cnt = 0; cnt < nr_t; cnt++) + pthread_join (pts[cnt], NULL); + + for (cnt = 0; cnt < nr_t; cnt++) + spe_context_destroy (ctx[cnt]); + + return 0; +} diff --git a/gdb/testsuite/gdb.cell/data.exp b/gdb/testsuite/gdb.cell/data.exp new file mode 100644 index 0000000..9bba172 --- /dev/null +++ b/gdb/testsuite/gdb.cell/data.exp @@ -0,0 +1,125 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcases tries to read variables of each kind both on PPU and SPU. + +load_lib cell.exp + +set testfile "data" +set ppu_file "data" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "data-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +proc check_var { name value } { + gdb_test "print $name" \ + ".*=.*$value" \ + "check_var $name = $value" +} + +proc set_var { name value } { + gdb_test "set var $name = $value" \ + "" \ + "set var $name = $value" +} + +proc dotest { name value } { + set_var $name $value + check_var $name $value +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Set values. +dotest var_char 'z' +dotest var_short 8 +dotest var_int 321 +dotest var_long 523442 +dotest var_longlong 235354533 +xfail "dotest var_float 33.2113" +xfail "dotest var_double 2.3456" +xfail "dotest var_longdouble 3.456789" + +gdb_test "break 55" \ + "Breakpoint.*at.*file.*$testfile.c, line 55.*" \ + "set breakpoint" +gdb_test "continue" \ + "Breakpoint.*at.*$testfile.c.*55.*" \ + "continue to bp at line 55" + +# Lookup variables. +check_var var_char 'c' +check_var var_short 7 +check_var var_int 1337 +check_var var_long 123456 +check_var var_longlong 123456789 +xfail "check_var var_float 1.23" +xfail "check_var var_double 2.3456" +xfail "check_var var_longdouble 3.456789" + +cont_spu_main +c_to "Marker SPU End" $spu_file.c + +# In SPU Thread, arch should now be spu:256K. +check_spu_arch "" + +# Lookup variables. +check_var var_char 'c' +check_var var_short 7 +check_var var_int 1337 +check_var var_long 123456 +check_var var_longlong 123456789 +xfail "check_var var_float 1.23" +xfail "check_var var_double 2.3456" +xfail "check_var var_longdouble 3.456789" + +gdb_exit +return 0 diff --git a/gdb/testsuite/gdb.cell/ea-cache-spu.c b/gdb/testsuite/gdb.cell/ea-cache-spu.c new file mode 100644 index 0000000..7cc27cb --- /dev/null +++ b/gdb/testsuite/gdb.cell/ea-cache-spu.c @@ -0,0 +1,41 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <spu_mfcio.h> + +__ea int *ppe_int_ptr; + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + printf ("spe.c | argp = 0x%llx\n", argp); + +#ifdef __EA32__ + ppe_int_ptr = (__ea int *)(unsigned long)argp; +#else + ppe_int_ptr = (__ea int *)argp; +#endif + printf ("spe.c | value = %d\n", *ppe_int_ptr); + *ppe_int_ptr = 42; /* Marker SPUEA */ + printf ("spe.c | value = %d\n", *ppe_int_ptr); + + return 0; +} diff --git a/gdb/testsuite/gdb.cell/ea-cache.c b/gdb/testsuite/gdb.cell/ea-cache.c new file mode 100644 index 0000000..a5a9aff --- /dev/null +++ b/gdb/testsuite/gdb.cell/ea-cache.c @@ -0,0 +1,64 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <libspe2.h> +#include <pthread.h> +#include <sys/wait.h> + +extern spe_program_handle_t ea_cache_spu; +int int_var = 23; + +void * +spe_thread (void *arg) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg; + + spe_program_load (*ctx, &ea_cache_spu); + spe_context_run (*ctx, &entry, flags, &int_var, NULL, NULL); + + pthread_exit (NULL); +} + +int +main (void) +{ + spe_context_ptr_t ctx; + pthread_t pts; + int thread_id; + + printf ("ppe.c | int_var vor %d | adr int_var %p\n", int_var, &int_var); + + /* Create SPE context and pthread. */ + ctx = spe_context_create (0, NULL); + thread_id = pthread_create (&pts, NULL, &spe_thread, &ctx); + + /* Join the pthread. */ + pthread_join (pts, NULL); + + /* Destroy the SPE context. */ + spe_context_destroy (ctx); + + printf ("ppe.c | int_var nach %d\n", int_var); + + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/ea-cache.exp b/gdb/testsuite/gdb.cell/ea-cache.exp new file mode 100644 index 0000000..381bc8b --- /dev/null +++ b/gdb/testsuite/gdb.cell/ea-cache.exp @@ -0,0 +1,90 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# Testcase for ea software managed cache. + +load_lib cell.exp + +set ppu_file "ea-cache" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "ea-cache-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Set breakpoint in SPU binary. +cont_spu_main +c_to "Marker SPUEA" $spu_file.c + +gdb_test "p *ppe_int_ptr" \ + ".*=.*23.*" \ + "p *ppe_int_ptr" + +gdb_test "set *ppe_int_ptr=42" "" "" + +gdb_test "p *ppe_int_ptr" \ + ".*=.*42.*" \ + "p *ppe_int_ptr" + +# Now switch to thread 1 (PPU) and look at int_var. ppe_int_ptr points to +# int_var and should now also contain 42 (ea cache has been flushed). +gdb_test "t 1" \ + ".*Switching to thread 1.*" \ + "Switch to thread 1" + +gdb_test "p int_var" \ + ".*=.*42.*" \ + "p int_var on ppu" + +gdb_exit +return 0 + + diff --git a/gdb/testsuite/gdb.cell/ea-standalone.c b/gdb/testsuite/gdb.cell/ea-standalone.c new file mode 100644 index 0000000..00ed8b3 --- /dev/null +++ b/gdb/testsuite/gdb.cell/ea-standalone.c @@ -0,0 +1,34 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <ea.h> + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + int a; + __ea int *myarray = malloc_ea (3 * sizeof (int)); + + memset_ea (myarray, 0, 3 * sizeof (int)); + a = ++myarray[0]; /* Marker SPUEA1 */ + printf("a: %d, myarray[0]: %d\n", a, myarray[0]); /* Marker SPUEA2 */ + return 0; +} diff --git a/gdb/testsuite/gdb.cell/ea-standalone.exp b/gdb/testsuite/gdb.cell/ea-standalone.exp new file mode 100644 index 0000000..e85ca93 --- /dev/null +++ b/gdb/testsuite/gdb.cell/ea-standalone.exp @@ -0,0 +1,64 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# Testcase for ea software managed cache in a standalone binary. + +load_lib cell.exp + +set testfile "ea-standalone" +set srcfile ${srcdir}/${subdir}/${testfile}.c +set binary ${objdir}/${subdir}/${testfile} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $srcfile $binary executable {debug}] != "" } { + unsupported "Compile spu binary failed, so all tests in this file will automatically fail." + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binary} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +c_to "Marker SPUEA1" $srcfile +gdb_test "p myarray\[0\]" \ + ".*= 0" \ + "p myarray\[0\]" + +c_to "Marker SPUEA2" $srcfile +gdb_test "p myarray\[0\]" \ + ".*= 1" \ + "p myarray\[0\]" +gdb_test "call __cache_flush()" "" "call cache_flush()" +gdb_test "p myarray\[0\]" \ + ".*= 1" \ + "p myarray\[0\]" + +gdb_exit +return 0 + + diff --git a/gdb/testsuite/gdb.cell/ea-test.c b/gdb/testsuite/gdb.cell/ea-test.c new file mode 100644 index 0000000..5f302b8 --- /dev/null +++ b/gdb/testsuite/gdb.cell/ea-test.c @@ -0,0 +1,33 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> + +__ea int *ppe_pointer; +int *normal_pointer; + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + static __ea int *local_ppe_pointer; + static int *local_normal_pointer; + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/ea-test.exp b/gdb/testsuite/gdb.cell/ea-test.exp new file mode 100644 index 0000000..a94b688 --- /dev/null +++ b/gdb/testsuite/gdb.cell/ea-test.exp @@ -0,0 +1,124 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# Testcase for __ea pointer + +load_lib cell.exp + +set testfile "ea-test" +set source ${srcdir}/${subdir}/${testfile}.c +set binary ${objdir}/${subdir}/${testfile} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $source $binary executable {debug}] != "" } { + unsupported "Compile spu binary failed, so all tests in this file will automatically fail." + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binary} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# p +gdb_test "p ppe_pointer" \ + "(int.*@__ea).*0x0.*" \ + "p ppe_pointer" + +gdb_test "p normal_pointer" \ + "(int.*).*0x0.*" \ + "p normal_pointer" + +gdb_test "p local_ppe_pointer" \ + "(int.*@__ea).*0x0.*" \ + "p local_ppe_pointer" + +gdb_test "p local_normal_pointer" \ + "(int.*).*0x0.*" \ + "p local_normal_pointer" + +# ptype +gdb_test "ptype ppe_pointer" \ + "type = int.*@__ea" \ + "ptype ppe_pointer" + +gdb_test "ptype normal_pointer" \ + "type = int.*" \ + "ptype normal_pointer" + +gdb_test "ptype local_ppe_pointer" \ + "type = int.*@__ea" \ + "ptype local_ppe_pointer" + +gdb_test "ptype local_normal_pointer" \ + "type = int.*" \ + "ptype local_normal_pointer" + +# info locals +gdb_test "info locals" \ + ".*local_ppe_pointer =.*0x0.*local_normal_pointer =.*0x0.*" \ + "info locals" + +# p & +gdb_test "p &ppe_pointer" \ + ".*=.*(int.*@__ea.*).*0x.*" \ + "p &ppe_pointer" + +gdb_test "p &normal_pointer" \ + ".*=.*(int.*).*0x.*" \ + "p &normal_pointer" + +gdb_test "p &local_ppe_pointer" \ + ".*=.*(int.*@__ea.*).*0x.*" \ + "p &local_ppe_pointer" + +gdb_test "p &local_normal_pointer" \ + ".*=.*(int.*).*0x.*" \ + "p &local_normal_pointer" + +# ptype * +gdb_test "ptype *ppe_pointer" \ + "type = int" \ + "ptype *ppe_pointer" + +gdb_test "ptype *normal_pointer" \ + "type = int" \ + "ptype *normal_pointer" + +gdb_test "ptype *local_ppe_pointer" \ + "type = int" \ + "ptype *local_ppe_pointer" + +gdb_test "ptype *local_normal_pointer" \ + "type = int" \ + "ptype *local_normal_pointer" + +gdb_exit + +return 0 + + diff --git a/gdb/testsuite/gdb.cell/f-regs.exp b/gdb/testsuite/gdb.cell/f-regs.exp new file mode 100644 index 0000000..115a53e --- /dev/null +++ b/gdb/testsuite/gdb.cell/f-regs.exp @@ -0,0 +1,89 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcase tests access to SPU vector registers while language is fortran. + +load_lib cell.exp + +set ppu_file "break" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "break-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +proc check_vector_regs {} { + for {set check_reg 0} {$check_reg < 128} {incr check_reg} { + + gdb_test "p \$r$check_reg" \ + "r$check_reg.*=.*\(.*\).*" \ + "p \$r$check_reg" + + gdb_test "ptype \$r$check_reg" \ + "type = Type,.*C_Union :: __spu_builtin_type_vec128.*int128_t :: uint128.*int64_t :: v2_int64.*int32_t :: v4_int32\(.*\).*int16_t :: v8_int16\(.*\).*int8_t :: v16_int8\(.*\).*double :: v2_double\(.*\).*float :: v4_float\(.*\).*End Type __spu_builtin_type_vec128.*" \ + "ptype \$r$check_reg" + } +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +# No programm running, no registers should be available. +gdb_test "info all-registers" \ + "The program has no registers now." \ + "info all-registers" + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +cont_spu_main +gdb_test "set language fortran" \ + "Warning: the current language does not match this frame.*" \ + "set language fortran" +check_vector_regs + +gdb_exit + +return 0 diff --git a/gdb/testsuite/gdb.cell/gcore.exp b/gdb/testsuite/gdb.cell/gcore.exp new file mode 100644 index 0000000..ed09394 --- /dev/null +++ b/gdb/testsuite/gdb.cell/gcore.exp @@ -0,0 +1,117 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcases tests mixed-architecture core file support + +load_lib cell.exp + +set testfile "coremaker" +set ppu_file "coremaker" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "coremaker-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {![isnative]} then { + return 0 +} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +gdb_test "continue" ".*Aborted.*" + +set escapedfilename [string_to_regexp ${objdir}/${subdir}/gcore.test] + +gdb_test_multiple "gcore ${objdir}/${subdir}/gcore.test" \ + "save a corefile" \ +{ + -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" { + pass "save a corefile" + } + -re "Can't create a corefile\[\r\n\]+$gdb_prompt $" { + unsupported "save a corefile" + return -1 + } +} + + +# Now restart gdb and load the corefile. +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +send_gdb "core-file $objdir/$subdir/gcore.test\n" +gdb_expect { + -re "Core was generated by .*coremaker.*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { + pass "core-file command" + } + -re "Core was generated by .*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { + pass "core-file command (with bad program name)" + } + -re ".*$gdb_prompt $" { fail "core-file command" } + timeout { fail "(timeout) core-file command" } +} + +gdb_test "t 6" "Switching to thread 6.*" +gdb_test "backtrace" ".*abort.*main.*at.*$ppu_file.c.*" + +for {set thread_id 1} {$thread_id < 6} {incr thread_id} { + gdb_test "t $thread_id" \ + "Switching to thread $thread_id.*" \ + "switch to thread $thread_id" + gdb_test "backtrace" \ + ".*terminal_func.*factorial_func.*value=1.*factorial_func.*value=2.*factorial_func.*value=3.*factorial_func.*value=4.*factorial_func.*value=5.*factorial_func.*value=6.*main.*speid.*argp.*envp.*at.*$spu_file.c.*<cross-architecture call>.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" \ + "backtrace in thread $thread_id" +} + +gdb_exit + +return 0 diff --git a/gdb/testsuite/gdb.cell/mem-access-spu.c b/gdb/testsuite/gdb.cell/mem-access-spu.c new file mode 100644 index 0000000..1eae158 --- /dev/null +++ b/gdb/testsuite/gdb.cell/mem-access-spu.c @@ -0,0 +1,36 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + int i; + static int test_var; + + printf ("Hello World! from spu\n"); + + test_var = 5; + i = 5; /* Marker SPUEA */ + printf ("i = %d\n", i); + + return 0; +} diff --git a/gdb/testsuite/gdb.cell/mem-access.c b/gdb/testsuite/gdb.cell/mem-access.c new file mode 100644 index 0000000..cb0adc4 --- /dev/null +++ b/gdb/testsuite/gdb.cell/mem-access.c @@ -0,0 +1,67 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <libspe2.h> +#include <pthread.h> +#include <sys/wait.h> + +extern spe_program_handle_t mem_access_spu; +#define nr_t 1 + +void * +spe_thread (void *arg) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg; + + spe_program_load (*ctx, &mem_access_spu); + spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL); + + pthread_exit (NULL); +} + +int +main (void) +{ + int thread_id[nr_t]; + pthread_t pts[nr_t]; + spe_context_ptr_t ctx[nr_t]; + int value = 1; + int cnt; + static int test_var; + + test_var = 5; + for (cnt = 0; cnt < nr_t; cnt++) /* Marker PPUEA */ + { + ctx[cnt] = spe_context_create (0, NULL); + thread_id[cnt] + = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]); + } + + for (cnt = 0; cnt < nr_t; cnt++) + pthread_join (pts[cnt], NULL); + + for (cnt = 0; cnt < nr_t; cnt++) + spe_context_destroy (ctx[cnt]); + + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/mem-access.exp b/gdb/testsuite/gdb.cell/mem-access.exp new file mode 100644 index 0000000..00159d2 --- /dev/null +++ b/gdb/testsuite/gdb.cell/mem-access.exp @@ -0,0 +1,170 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcases tests on PPU and SPU if variables and registers are accessible +# via print and set by using names and adresses. + +load_lib cell.exp + +set ppu_file "mem-access" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "mem-access-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +# Get the adress to symbol name. If $reg +# is set to 1, get address from a register. +proc get_adress_from_name { name reg } { + global gdb_prompt + set adr "" + + if { $reg == 1 } { + set q "x/x $name" + } else { + set q "x/x &$name" + } + + gdb_test_multiple $q "get address from $name" { + -re "(0x.....):.*$gdb_prompt $" { # Registers. + set adr $expect_out(1,string) + pass "get adress from $name = $adr" + } + -re "(0x........) <.*$gdb_prompt $" { # PPU address. + set adr $expect_out(1,string) + pass "get adress from $name = $adr" + } + -re "(0x....) <.*$gdb_prompt $" { # SPU address. + set adr $expect_out(1,string) + pass "get adress from $name = $adr" + } + -re "(0x...) <.*$gdb_prompt $" { # SPU address. + set adr $expect_out(1,string) + pass "get adress from $name = $adr" + } + } + + return ${adr} +} + +# Try to set a $value at adress $adr. +proc set_adr_content { adr value } { + gdb_test "set *$adr=$value" \ + "" \ + "set *$adr=$value" +} + +# Try to set a $value for $symbol. +proc set_symbol_content { symbol value } { + gdb_test "set $symbol=$value" \ + "" \ + "set *$symbol=$value" +} + +# Check if $value is at *adr +proc test_adr_content { adr value } { + gdb_test "p *$adr" \ + ".*=.*$value.*" \ + "(ptr) *$adr==$value" +} + +proc test_symbol_content { symbol value } { + gdb_test "p $symbol" \ + ".*=.*$value.*" \ + "(symbol) $symbol==$value" +} + +# Check VARNAME. Check if it has the inital +# value INITIALVALUE. Set it to NEWVALUE. +# Check if set properly. Do it via symbols and +# pointers. +proc check_var { varname initalvalue newvalue } { + + # Initial value should be $initalvalue. + test_symbol_content $varname $initalvalue + + # Get pointer to symbol and check if the + # initial value is found. + set adr [get_adress_from_name $varname 0] + test_adr_content $adr $initalvalue + + # Re-set value using the pointer. + set_adr_content $adr $newvalue + + # Test values by pointer and by symbol. + test_adr_content $adr $newvalue + test_symbol_content $varname $newvalue + + # Set value back to initalvalue using symbol + # name and check it. + set_symbol_content $varname $initalvalue + test_adr_content $adr $initalvalue + test_symbol_content $varname $initalvalue +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Check in PPU thread. +c_to "Marker PPUEA" $ppu_file.c +check_var "test_var" 5 7 + +# Go to SPU thread. +cont_spu_main +c_to "Marker SPUEA" $spu_file.c +check_spu_arch "" + +# Check in SPU thread. +check_var "test_var" 5 7 +# Check $sp register. +set adr [get_adress_from_name "\$sp" 1] +set_adr_content $adr 8 +test_adr_content $adr 8 + +gdb_exit +return 0 diff --git a/gdb/testsuite/gdb.cell/ptype.exp b/gdb/testsuite/gdb.cell/ptype.exp new file mode 100644 index 0000000..dcb546b --- /dev/null +++ b/gdb/testsuite/gdb.cell/ptype.exp @@ -0,0 +1,145 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# Test ptype and print/set of SPU-side registers. + +load_lib cell.exp + +set ppu_file "break" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "break-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Continue to SPU +cont_spu_main + +gdb_test "info registers r2" \ + "r2.*\{uint128 =.*v2_int64 =.*v4_int32 =.*v8_int16 =.*v16_int8 =.*v2_double =.*v4_float =.*\}.*" \ + "info registers r2" + +for {set check_reg 10} {$check_reg < 12} {incr check_reg} { + gdb_test "print \$r$check_reg\.v4_int32" \ + ".*= \{.*,.*,.*,.*\}" \ + "print \$r$check_reg\.v4_int32" + + gdb_test "ptype \$r$check_reg" \ + "type = union __spu_builtin_type_vec128.*\{.*int128_t uint128.* \ + int64_t v2_int64.*int32_t v4_int32.*int16_t v8_int16.* \ + int8_t v16_int8.*double v2_double.*float v4_float.*\}" \ + "ptype \$r$check_reg" + + gdb_test "set \$r$check_reg\.v4_int32 = {1,2,3,4}" \ + "" \ + "set \$r$check_reg\.v4_int32 = {1,2,3,4}" + + gdb_test "print \$r$check_reg\.v4_int32" \ + ".*= \{.*1, 2, 3, 4.*\}" \ + "print \$r$check_reg\.v4_int32" + + gdb_test "print \$r$check_reg.v4_int32\[0\]" \ + ".*= 1.*" \ + "print \$r$check_reg.v4_int32\[0\]" + + gdb_test "print \$r$check_reg.v4_int32\[1\]" \ + ".*= 2.*" \ + "print \$r$check_reg.v4_int32\[1\]" + + gdb_test "print \$r$check_reg.v4_int32\[2\]" \ + ".*= 3.*" \ + "print \$r$check_reg.v4_int32\[2\]" + + gdb_test "print \$r$check_reg.v4_int32\[3\]" \ + ".*= 4.*" \ + "print \$r$check_reg.v4_int32\[3\]" + + gdb_test "print \$r$check_reg.v4_int32\[4\]" \ + "no such vector element" \ + "print \$r$check_reg.v4_int32\[4\]" + + # Set single array elements to other values and check the results. + gdb_test "set \$r$check_reg\.v4_int32\[0\] = 5" \ + "" \ + "set \$r$check_reg\.v4_int32\[0\] = 5" + gdb_test "print \$r$check_reg.v4_int32\[0\]" \ + ".*= 5.*" \ + "print \$r$check_reg.v4_int32\[0\]" + + gdb_test "set \$r$check_reg\.v4_int32\[1\] = 6" \ + "" \ + "set \$r$check_reg\.v4_int32\[1\] = 6" + gdb_test "print \$r$check_reg.v4_int32\[1\]" \ + ".*= 6.*" \ + "print \$r$check_reg.v4_int32\[1\]" + + gdb_test "set \$r$check_reg\.v4_int32\[2\] = 7" \ + "" \ + "set \$r$check_reg\.v4_int32\[2\] = 7" + gdb_test "print \$r$check_reg.v4_int32\[2\]" \ + ".*= 7.*" \ + "print \$r$check_reg.v4_int32\[2\]" + + gdb_test "set \$r$check_reg\.v4_int32\[3\] = 8" \ + "" \ + "set \$r$check_reg\.v4_int32\[3\] = 8" + gdb_test "print \$r$check_reg.v4_int32\[3\]" \ + ".*= 8.*" \ + "print \$r$check_reg.v4_int32\[3\]" + + # Now there should be {5, 6, 7, 8} in that array. + gdb_test "print \$r$check_reg\.v4_int32" \ + ".*= \{.*5, 6, 7, 8.*\}" \ + "print \$r$check_reg\.v4_int32" +} + +gdb_exit +return 0 diff --git a/gdb/testsuite/gdb.cell/registers.exp b/gdb/testsuite/gdb.cell/registers.exp new file mode 100644 index 0000000..1c0fcc2 --- /dev/null +++ b/gdb/testsuite/gdb.cell/registers.exp @@ -0,0 +1,106 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcase tests registers on PPU and SPU. + +load_lib cell.exp + +set ppu_file "break" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "break-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +# No programm running, no registers should be available. +gdb_test "info all-registers" \ + "The program has no registers now." \ + "info all-registers" + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Check registers in PPU thread. +gdb_test "info reg r0" "r0.*" "info register r0" +gdb_test "info reg r31" "r31.*" "info register r31" +gdb_test "info reg r32" "Invalid register.*r32.*" "(invalid) info register r32" +gdb_test "info reg pc" "pc.*" "info register pc" +gdb_test "info reg cr" "cr.*" "info register cr" +gdb_test "info reg lr" "lr.*" "info register lr" +gdb_test "info reg ctr" "ctr.*" "info register ctr" +gdb_test "info reg xer" "xer.*" "info register xer" + +# Continue to SPU thread. +cont_spu_main + +# In SPU thread, check SPU registers. +for {set check_reg 0} {$check_reg < 128} {incr check_reg} { + gdb_test "info reg r$check_reg" \ + "r$check_reg.*uint128.*=.*v2\_int64.*v4\_int32.*v8\_int16.*v16\_int8.*v2\_double.*v4\_float.*" \ + "info register r$check_reg" +} +gdb_test "info reg r128" \ + "Invalid register.*r128.*" \ + "(invalid) info register r128" + +gdb_test "info reg pc" "pc.*main.*" "info register pc" +gdb_test "info reg id" "id.*" "info register id" +gdb_test "info reg sp" "sp.*" "info register sp" +gdb_test "info reg fpscr" "fpscr.*" "info register fpscr" +gdb_test "info reg srr0" "srr0.*" "info register srr0" +gdb_test "info reg lslr" "lslr.*" "info register lslr" +gdb_test "info reg decr" "decr.*" "info register decr" +gdb_test "info reg decr_status" "decr_status.*" "info register decr-status" + +gdb_test "info reg cr" "Invalid register.*cr.*" "info register cr" +gdb_test "info reg lr" "Invalid register.*lr.*" "info register lr" +gdb_test "info reg ctr" "Invalid register.*ctr.*" "info register ctr" +gdb_test "info reg xer" "Invalid register.*xer.*" "info register xer" + +gdb_exit +return 0 diff --git a/gdb/testsuite/gdb.cell/size-spu.c b/gdb/testsuite/gdb.cell/size-spu.c new file mode 100644 index 0000000..ca5ec98 --- /dev/null +++ b/gdb/testsuite/gdb.cell/size-spu.c @@ -0,0 +1,53 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> + + +int +main (unsigned long long speid, unsigned long long argp, + unsigned long long envp) +{ + int c = sizeof (char); /* Break here. */ + printf ("sizeof(char)=%d\n", c); + + int s = sizeof (short); + printf ("sizeof(short)=%d\n", s); + + int i = sizeof (int); + printf ("sizeof(int)=%d\n", i); + + int l = sizeof (long); + printf ("sizeof(long)=%d\n", l); + + int ll = sizeof (long long); + printf ("sizeof(long long)=%d\n", ll); + + int f = sizeof (float); + printf ("sizeof(float)=%d\n", f); + + int d = sizeof (double); + printf ("sizeof(double)=%d\n", d); + + int ld = sizeof (long double); + printf ("sizeof(long double)=%d\n", ld); + + return 0; +} + diff --git a/gdb/testsuite/gdb.cell/size.c b/gdb/testsuite/gdb.cell/size.c new file mode 100644 index 0000000..c7ef279 --- /dev/null +++ b/gdb/testsuite/gdb.cell/size.c @@ -0,0 +1,87 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. + + Contributed by Markus Deuling <deuling@de.ibm.com> */ + +#include <stdio.h> +#include <libspe2.h> +#include <pthread.h> +#include <sys/wait.h> + +extern spe_program_handle_t size_spu; +#define nr_t 1 + +void * +spe_thread (void *arg) +{ + int flags = 0; + unsigned int entry = SPE_DEFAULT_ENTRY; + spe_context_ptr_t *ctx = (spe_context_ptr_t *) arg; + + spe_program_load (*ctx, &size_spu); + spe_context_run (*ctx, &entry, flags, NULL, NULL, NULL); + + pthread_exit (NULL); +} + +int +main (void) +{ + int thread_id[nr_t]; + pthread_t pts[nr_t]; + spe_context_ptr_t ctx[nr_t]; + int cnt; + + int c = sizeof (char); + printf ("sizeof(char)=%d\n", c); + + int s = sizeof (short); + printf ("sizeof(short)=%d\n", s); + + int i = sizeof (int); + printf ("sizeof(int)=%d\n", i); + + int l = sizeof (long); + printf ("sizeof(long)=%d\n", l); + + int ll = sizeof (long long); + printf ("sizeof(long long)=%d\n", ll); + + int f = sizeof (float); + printf ("sizeof(float)=%d\n", f); + + int d = sizeof (double); + printf ("sizeof(double)=%d\n", d); + + int ld = sizeof (long double); + printf ("sizeof(long double)=%d\n", ld); + + for (cnt = 0; cnt < nr_t; cnt++) + { + ctx[cnt] = spe_context_create (0, NULL); + thread_id[cnt] + = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]); + } + + for (cnt = 0; cnt < nr_t; cnt++) + pthread_join (pts[cnt], NULL); + + for (cnt = 0; cnt < nr_t; cnt++) + spe_context_destroy (ctx[cnt]); + + return 0; +} diff --git a/gdb/testsuite/gdb.cell/sizeof.exp b/gdb/testsuite/gdb.cell/sizeof.exp new file mode 100644 index 0000000..cd950d4 --- /dev/null +++ b/gdb/testsuite/gdb.cell/sizeof.exp @@ -0,0 +1,120 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# Check size of data types both on PPU and SPU. + +load_lib cell.exp + +set ppu_file "size" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "size-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + + +# Ask GDB about the sizes of data types. This has +# to be done in PPU thread and SPU thread. +proc get_gdb_size { type } { + global gdb_prompt + + set val "0" + gdb_test_multiple "print/d sizeof(${type})" "get sizeof(${type})" { + -re "\\$\[0-9\]* = (\[-\]*\[0-9\]*).*$gdb_prompt $" { + set val $expect_out(1,string) + pass "get sizeof ($type) = $val" + } + } + return ${val} +} + +# Compare sizes from GDB and sizeof(). +proc size_compare { type gdb_size } { + set expr [string_to_regexp "sizeof(${type})=${gdb_size}"] + gdb_test "next" \ + ".*" \ + "next" + # Checks against string_to_regexp fails in remote testing. + if ![is_remote target] { + gdb_test "next" \ + "${expr}.*" \ + "check sizeof \"$type\" \"$gdb_size\" " + } else { + gdb_test "next" ".*" "check sizeof deactivate in remote testing" + } +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Compare sizes. +size_compare "char" [get_gdb_size "char"] +size_compare "short" [get_gdb_size "short"] +size_compare "int" [get_gdb_size "int"] +size_compare "long" [get_gdb_size "long"] +size_compare "long long" [get_gdb_size "long long"] +size_compare "float" [get_gdb_size "float"] +size_compare "double" [get_gdb_size "double"] +size_compare "long double" [get_gdb_size "long double"] + +# Continue to SPU thread. +cont_spu_main +check_spu_arch "" + +# Compare sizes in SPU thread. +size_compare "char" [get_gdb_size "char"] +size_compare "short" [get_gdb_size "short"] +size_compare "int" [get_gdb_size "int"] +size_compare "long" [get_gdb_size "long"] +size_compare "long long" [get_gdb_size "long long"] +size_compare "float" [get_gdb_size "float"] +size_compare "double" [get_gdb_size "double"] +size_compare "long double" [get_gdb_size "long double"] + +gdb_exit +return 0 diff --git a/gdb/testsuite/gdb.cell/solib-symbol.exp b/gdb/testsuite/gdb.cell/solib-symbol.exp new file mode 100644 index 0000000..cd48e11 --- /dev/null +++ b/gdb/testsuite/gdb.cell/solib-symbol.exp @@ -0,0 +1,80 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# Testcase for multiple symbol disambiguation patch. + +load_lib cell.exp + +set ppu_file "break" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "break-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Breakpoint resolved in PPU thread. +gdb_test "break foo" \ + "Breakpoint.*file.*$ppu_file.c.*" \ + "br foo in break" + +# Continue to SPU +cont_spu_main +check_spu_arch "" + +# Breakpoint resolved in SPU thread. +delete_breakpoints +gdb_test "break foo" \ + "Breakpoint.*file.*$spu_file.c.*" \ + "br foo in $spu_file.c" + +gdb_exit +return 0 diff --git a/gdb/testsuite/gdb.cell/solib.exp b/gdb/testsuite/gdb.cell/solib.exp new file mode 100644 index 0000000..1341bfa --- /dev/null +++ b/gdb/testsuite/gdb.cell/solib.exp @@ -0,0 +1,86 @@ +# Copyright 2009 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 3 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, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# This testcase checks 'info sharedlibrary ' command. + +load_lib cell.exp + +set ppu_file "break" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "break-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +# No programm running, no libraries should be loaded. +gdb_test "info sharedlibrary" \ + "No shared libraries loaded at this time." \ + "no shared library is loaded" + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Standing in PPU thread, now some libs should be loaded +# including libspe library. +gdb_test "info sharedlibrary" \ + "From.*To.*Syms Read.*Shared Object Library.*libspe.*" \ + "binary started, some libraries loaded" + +# Continue to SPU +cont_spu_main +check_spu_arch "" + +# In SPU thread now, the SPU binary should now appear in the list +# of shared libraries. +gdb_test "info sharedlibrary" \ + "From.*To.*Syms Read.*Shared Object Library.*libspe.*$spu_bin.*@.*x.*" \ + "spu thread, spu binary as shared library" + +gdb_exit +return 0 |