* config/monitor.exp(gdb_load): Handle gdb_sect_offset and

gdb_load_offset.
This commit is contained in:
Bob Manson 1997-05-23 21:49:12 +00:00
parent badd64f29f
commit 1e0d962e4f
3 changed files with 83 additions and 36 deletions

View File

@ -1,5 +1,8 @@
Fri May 23 13:28:29 1997 Bob Manson <manson@charmed.cygnus.com>
* config/monitor.exp(gdb_load): Handle gdb_sect_offset and
gdb_load_offset.
* config/i386-bozo.exp: New file.
Thu May 22 18:51:32 1997 Bob Manson <manson@charmed.cygnus.com>

View File

@ -27,6 +27,7 @@ gdbserver.exp
h8300.exp
hmsirom.exp
hppro.exp
i386-bozo.exp
i960.exp
m32r.exp
m32r-stub.exp

View File

@ -38,7 +38,9 @@ proc gdb_target_monitor { } {
if [target_info exists baud] {
gdb_test "set remotebaud [target_info baud]" "" ""
}
if [target_info exists netport] {
if [target_info exists gdb_serial] {
set serialport "[target_info gdb_serial]";
} elseif [target_info exists netport] {
set serialport "[target_info netport]"
} else {
set serialport "[target_info serial]"
@ -88,6 +90,10 @@ proc gdb_target_monitor { } {
return -1;
}
proc gdb_target_exec { } {
gdb_test "target exec" "No exec file now." "" ".*Kill it.*y or n.*" "y"
}
#
# gdb_load -- load a file into the debugger.
# return a -1 if anything goes wrong.
@ -102,56 +108,87 @@ proc gdb_load { arg } {
for { set j 1; } { $j <= 2 } {incr j; } {
if [target_info exists gdb,use_standard_load] {
gdb_test "target exec" "No exec file now." "" ".*Kill it.*y or n.*" "y"
gdb_target_exec;
remote_push_conn host;
set state [remote_ld target $arg];
remote_close target;
remote_pop_conn host;
if { $state != "pass" } {
perror "Couldn't load file into GDB."
return -1;
if { $state == "pass" } {
if { $arg != "" } {
if [gdb_file_cmd $arg] { return -1 }
}
gdb_target_monitor;
gdb_test "list main" ".*" ""
verbose "Loaded $arg into $GDB\n";
return 1;
}
} else {
if { $arg != "" } {
if [gdb_file_cmd $arg] { return -1 }
}
gdb_target_monitor;
gdb_test "list main" ".*" ""
verbose "Loaded $arg into $GDB\n";
return 1;
}
gdb_target_monitor
if { $arg != "" } {
if [gdb_file_cmd $arg] { return -1 }
}
gdb_target_monitor
if [is_remote host] {
# FIXME:
set arg a.out;
}
verbose "Loading $arg"
send_gdb "load $arg\n"
set timeout 1000
verbose "Timeout is now $timeout seconds" 2
gdb_expect {
-re ".*\[Ff\]ailed.*$gdb_prompt $" {
verbose "load failed";
if [target_info exists gdb_sect_offset] {
set textoff [target_info gdb_sect_offset];
send_gdb "sect .text $textoff\n";
gdb_expect {
-re "(0x\[0-9a-z]+) - 0x\[0-9a-z\]+ is \\.data" {
set dataoff $expect_out(1,string);
exp_continue;
}
-re "(0x\[0-9a-z\]+) - 0x\[0-9a-z\]+ is \\.bss" {
set bssoff $expect_out(1,string);
exp_continue;
}
-re "$gdb_prompt" { }
}
set dataoff [format 0x%x [expr $dataoff + $textoff]];
set bssoff [format 0x%x [expr $bssoff + $textoff]];
send_gdb "sect .data $dataoff\n";
gdb_expect {
-re "$gdb_prompt" { }
}
send_gdb "sect .bss $bssoff\n";
gdb_expect {
-re "$gdb_prompt" { }
}
}
-re ".*$gdb_prompt $" {
verbose "Loaded $arg into $GDB\n"
return 1
if [is_remote host] {
# FIXME:
set arg a.out;
}
timeout {
if { $verbose > 1 } {
perror "Timed out trying to load $arg."
verbose "Loading $arg"
if [target_info exists gdb_load_offset] {
set command "load $arg [target_info gdb_load_offset]\n";
} else {
set command "load $arg\n";
}
send_gdb $command;
set timeout 1000
verbose "Timeout is now $timeout seconds" 2
gdb_expect {
-re ".*\[Ff\]ailed.*$gdb_prompt $" {
verbose "load failed";
}
-re ".*$gdb_prompt $" {
verbose "Loaded $arg into $GDB\n"
return 1
}
timeout {
if { $verbose > 1 } {
perror "Timed out trying to load $arg."
}
}
}
}
gdb_test "target exec" "No exec file now." "" ".*Kill it.*y or n.*" "y"
if { $j == 1 && ![reboot_target] } {
break;
gdb_target_exec;
if { $j == 1 } {
if { ![reboot_target] } {
break;
}
}
}
perror "Couldn't load file into GDB.";
@ -161,11 +198,17 @@ proc gdb_load { arg } {
proc gdb_start { } {
global timeout
global reboot
global gdb_prompt;
# reboot the board to get a clean start
if $reboot then {
reboot_target;
}
if [board_info target exists gdb_prompt] {
set gdb_prompt [board_info target gdb_prompt];
}
catch default_gdb_start;
set timeout 10