send_gdb "continue\n"
gdb_expect {
- -re "Breakpoint .* at $location_pattern\r\n$gdb_prompt $" {
+ -re "Breakpoint .* (at|in) $location_pattern\r\n$gdb_prompt $" {
pass $full_name
}
-re ".*$gdb_prompt $" {
return $skip_vmx_tests_saved
}
+# Run a test on the target to see if it supports vmx hardware. Return 0 if so,
+# 1 if it does not. Based on 'check_vmx_hw_available' from the GCC testsuite.
+
+proc skip_vsx_tests {} {
+ global skip_vsx_tests_saved
+ global srcdir subdir gdb_prompt
+
+ # Use the cached value, if it exists.
+ set me "skip_vsx_tests"
+ if [info exists skip_vsx_tests_saved] {
+ verbose "$me: returning saved $skip_vsx_tests_saved" 2
+ return $skip_vsx_tests_saved
+ }
+
+ # Some simulators are known to not support Altivec instructions, so
+ # they won't support VSX instructions as well.
+ if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] } {
+ verbose "$me: target known to not support VSX, returning 1" 2
+ return [set skip_vsx_tests_saved 1]
+ }
+
+ # Make sure we have a compiler that understands altivec.
+ set compile_flags {debug nowarnings quiet}
+ if [get_compiler_info not-used] {
+ warning "Could not get compiler info"
+ return 1
+ }
+ if [test_compiler_info gcc*] {
+ set compile_flags "$compile_flags additional_flags=-mvsx"
+ } elseif [test_compiler_info xlc*] {
+ set compile_flags "$compile_flags additional_flags=-qvsx"
+ } else {
+ verbose "Could not compile with vsx support, returning 1" 2
+ return 1
+ }
+
+ set src vsx[pid].c
+ set exe vsx[pid].x
+
+ set f [open $src "w"]
+ puts $f "int main() {"
+ puts $f "#ifdef __MACH__"
+ puts $f " asm volatile (\"lxvd2x v0,v0,v0\");"
+ puts $f "#else"
+ puts $f " asm volatile (\"lxvd2x 0,0,0\");"
+ puts $f "#endif"
+ puts $f " return 0; }"
+ close $f
+
+ verbose "$me: compiling testfile $src" 2
+ set lines [gdb_compile $src $exe executable $compile_flags]
+ file delete $src
+
+ if ![string match "" $lines] then {
+ verbose "$me: testfile compilation failed, returning 1" 2
+ return [set skip_vsx_tests_saved 1]
+ }
+
+ # No error message, compilation succeeded so now run it via gdb.
+
+ gdb_exit
+ gdb_start
+ gdb_reinitialize_dir $srcdir/$subdir
+ gdb_load "$exe"
+ gdb_run_cmd
+ gdb_expect {
+ -re ".*Illegal instruction.*${gdb_prompt} $" {
+ verbose -log "\n$me VSX hardware not detected"
+ set skip_vsx_tests_saved 1
+ }
+ -re ".*Program exited normally.*${gdb_prompt} $" {
+ verbose -log "\n$me: VSX hardware detected"
+ set skip_vsx_tests_saved 0
+ }
+ default {
+ warning "\n$me: default case taken"
+ set skip_vsx_tests_saved 1
+ }
+ }
+ gdb_exit
+ remote_file build delete $exe
+
+ verbose "$me: returning $skip_vsx_tests_saved" 2
+ return $skip_vsx_tests_saved
+}
+
# Skip all the tests in the file if you are not on an hppa running
# hpux target.
set gdb_wrapper_initialized 1
}
+# Some targets need to always link a special object in. Save its path here.
+global gdb_saved_set_unbuffered_mode_obj
+set gdb_saved_set_unbuffered_mode_obj ""
+
proc gdb_compile {source dest type options} {
global GDB_TESTCASE_OPTIONS;
global gdb_wrapper_file;
global gdb_wrapper_flags;
global gdb_wrapper_initialized;
+ global srcdir
+ global objdir
+ global gdb_saved_set_unbuffered_mode_obj
set outdir [file dirname $dest]
set options [lreplace $options $nowarnings $nowarnings $flag]
}
+ if { $type == "executable" } {
+ if { ([istarget "*-*-mingw*"]
+ || [istarget "*-*-cygwin*"])} {
+ # Force output to unbuffered mode, by linking in an object file
+ # with a global contructor that calls setvbuf.
+ #
+ # Compile the special object seperatelly for two reasons:
+ # 1) Insulate it from $options.
+ # 2) Avoid compiling it for every gdb_compile invocation,
+ # which is time consuming, especially if we're remote
+ # host testing.
+ #
+ if { $gdb_saved_set_unbuffered_mode_obj == "" } {
+ verbose "compiling gdb_saved_set_unbuffered_obj"
+ set unbuf_src ${srcdir}/lib/set_unbuffered_mode.c
+ set unbuf_obj ${objdir}/set_unbuffered_mode.o
+
+ set result [gdb_compile "${unbuf_src}" "${unbuf_obj}" object {nowarnings}]
+ if { $result != "" } {
+ return $result
+ }
+
+ set gdb_saved_set_unbuffered_mode_obj ${objdir}/set_unbuffered_mode_saved.o
+ # Link a copy of the output object, because the
+ # original may be automatically deleted.
+ remote_exec host "cp -f $unbuf_obj $gdb_saved_set_unbuffered_mode_obj"
+ } else {
+ verbose "gdb_saved_set_unbuffered_obj already compiled"
+ }
+
+ # Rely on the internal knowledge that the global ctors are ran in
+ # reverse link order. In that case, we can use ldflags to
+ # avoid copying the object file to the host multiple
+ # times.
+ lappend options "ldflags=$gdb_saved_set_unbuffered_mode_obj"
+ }
+ }
+
set result [target_compile $source $dest $type $options];
# Prune uninteresting compiler (and linker) output.