bug.exp   [plain text]


# Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.

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

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

# This file was written by Rob Savoye. (rob@welcomehome.org)

#load_lib remote.exp

#
# set target variables only if needed.
#
global targetname
global connectmode
global env

if ![info exists targetname] {
    if [info exists env(TARGETNAME)] {
	set targetname $env(TARGETNAME)
    } else {
	puts stderr "ERROR: Need a target name for the board."
	puts stderr "       Use the --name option\n"
	exit 1
    }
}

# the default connect program to use
if ![info exists connectmode] {
    set connectmode	"tip"
    warning "Using default of $connectmode for target communication."
}		

#
# Load a file into the bug monitor
#
proc bug_load { shell_id file } {
    global OBJCOPY
    global shell_prompt

    if { $shell_id < 0 } {
	warning "$file not executed because there is no target."
	return -1
    }

    # NOTE: this requires OBJCOPY to be tested first
    catch "exec $OBJCOPY -O srec $file $file.srec" result
    if ![string match "" $result] {
	perror "Couldn't convert to srecord for downloading"
	return -1
    }

    send -i $shell_id "lo 0\r"
    expect {
	-i $shell_id "lo 0*" {
	    verbose "Got load command echo" 0
	}
	-i $shell_id timeout {
	    perror "Load command didn't echo back"
	    return -1
	}
    }

    if { [download $file.srec $shell_id] < 0 } {
	return -1
    }

    send -i $shell_id "\r\r"
    expect {
	-i $shell_id -re "$shell_prompt.*$" {
	}
	-i $shell_id timeout {
	    perror "Load command didn't echo back"
	    return -1
	}
    }
    
    catch "exec rm -f $file.srec"
    return 0
}

#
# Execute a program
#
proc bug_execute { shell_id addr } {
    global shell_prompt
    global exec_output

    set exec_output ""

    if { $shell_id < 0 } {
	warning "$arg not executed because there is no target."
	return -1
    }
    send -i $shell_id "go $addr\r"
    verbose "Sent execute command"
    expect {
	-i $shell_id "*Effective address: $addr" {
	    exp_continue
	}
	-i $shell_id -re "$shell_prompt.*$" {
	    set exec_output $expect_out(buffer)
	    return 0
	}
	-i $shell_id timeout { 
	    perror "Couldn't execute program (timed out)."
	    return 1
	}
    }

}