# Copyright 2002 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Michael Snyder (msnyder@redhat.com)
# This is a test for the gdb command "info proc"

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

set testfile "break"
set srcfile  ${testfile}.c
set binfile  ${objdir}/${subdir}/${testfile}
set ws "\[ \t\]+"

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# Does this gdb support info proc?
send_gdb "help info proc\n"
gdb_expect {
    -re "Undefined info command: .proc..  Try .help info.*$gdb_prompt $" {
	# info proc command not supported -- nothing to test here.
	unsupported "gdb does not support info proc on this target"
	return -1;
    }
    -re "Show /proc process information about .*$gdb_prompt $" {
	pass "help info proc"
    }
    -re ".*$gdb_prompt $" {
	fail "help info proc"
    }
    timeout {
	fail "help info proc (timeout)"
    }
}

gdb_test "info proc" "No current process.*" "info proc without a process"

if { ! [ runto main ] } then {
    gdb_suppress_entire_file "Run to main failed, so all tests in this file will automatically fail."
}

gdb_test "info proc" "process ${decimal}.*" "info proc with process"

gdb_test "info proc mapping" \
	".*Mapped address spaces:.*${hex}${ws}${hex}${ws}${hex}${ws}${hex}.*" \
	"info proc mapping"
