#   Copyright 2003, 2007, 2008 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/>.  */

# Test running a program from the GDB prompt and then detaching it.
# NOTE: This test could be much more thorough.

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

# Only GNU/Linux is known to support this.
if { ! [istarget "*-*-linux*"] } {
  return 0
}

# Are we on a target board?
if [is_remote target] then {
    return 0
}

set testfile "attach"
set srcfile  ${testfile}.c
set binfile  ${objdir}/${subdir}/${testfile}
set escapedbinfile  [string_to_regexp ${objdir}/${subdir}/${testfile}]

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested detach.exp
     return -1
}

proc do_detach_tests {} {
  global srcdir
  global binfile
  global escapedbinfile
  global subdir
  global pass

  runto_main
  gdb_test "set should_exit = 1" "" "set should_exit, $pass"
  gdb_test "detach" "Detaching from program: .*$escapedbinfile, .*" "detach, $pass"
}

# Start with a fresh gdb
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

global pass
set pass "one"
do_detach_tests

# Wait a moment and do it again.
exec sleep 1

set pass "two"
do_detach_tests

return 0
