aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Waroquiers <philippe.waroquiers@skynet.be>2019-12-21 14:19:40 +0100
committerPhilippe Waroquiers <philippe.waroquiers@skynet.be>2020-01-25 11:08:24 +0100
commitb1468492c69335b023e6e4adf15ba0de0263812e (patch)
treea4ac8fefbad17a1e3cdd4fd07cbdae71692a003e
parenta2fedca99c622e1b523046d09f573b06de0207a6 (diff)
downloadgdb-b1468492c69335b023e6e4adf15ba0de0263812e.zip
gdb-b1468492c69335b023e6e4adf15ba0de0263812e.tar.gz
gdb-b1468492c69335b023e6e4adf15ba0de0263812e.tar.bz2
Test 'set exec-file-mismatch ask|warn|off'.
Modify gdb.base/attach.exp to test the behaviour of the option exec-file-mismatch. Note that this test can also be run using/ make check RUNTESTFLAGS="--target_board=native-extended-gdbserver" TESTS=gdb.base/attach.exp to test the behaviour of attaching to running program using a gdb server. Note: when running the test with a gdbserver, the tests in test_command_line_attach_run fail because the command "run" is not supported. I tried to extend the condition if ![isnative] then { unsupported "commandline attach run test" return 0 } but unclear to me how to best do that. The below trials all failed to work properly: if { ![isnative] || [target_is_gdbserver] } then { if { ![isnative] || [use_gdb_stub] } then { if { ![isnative] || [is_remote target] } then { => could never obtain a condition that was true with gdbserver. 2020-01-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/attach.exp: Test 'set exec-file-mismatch'.
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.base/attach.c1
-rw-r--r--gdb/testsuite/gdb.base/attach.exp84
-rw-r--r--gdb/testsuite/gdb.base/attach2.c1
4 files changed, 89 insertions, 1 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index d56c26d..70cbb75 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2020-01-25 Philippe Waroquiers <philippe.waroquiers@skynet.be>
+
+ * gdb.base/attach.exp: Test 'set exec-file-mismatch'.
+
2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.dwarf2/dw2-inline-many-frames.c: New file.
diff --git a/gdb/testsuite/gdb.base/attach.c b/gdb/testsuite/gdb.base/attach.c
index 91b180c..2e87f9b 100644
--- a/gdb/testsuite/gdb.base/attach.c
+++ b/gdb/testsuite/gdb.base/attach.c
@@ -7,6 +7,7 @@
#include <stdio.h>
#include <unistd.h>
+int bidule = 0;
int should_exit = 0;
int main ()
diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp
index 52a8995..5a1d7a84 100644
--- a/gdb/testsuite/gdb.base/attach.exp
+++ b/gdb/testsuite/gdb.base/attach.exp
@@ -474,7 +474,12 @@ proc test_command_line_attach_run {} {
global gdb_prompt
global binfile
- if ![isnative] then {
+ # Skip test if we cannot attach on the command line and use the run command.
+ # ??? Unclear what condition to use to return here when using gdbserver.
+ # ??? None of the below works.
+ # ![isnative] || [target_is_gdbserver]
+ # ![isnative] || [use_gdb_stub]
+ if { ![isnative] || [is_remote target] } then {
unsupported "commandline attach run test"
return 0
}
@@ -513,14 +518,91 @@ proc test_command_line_attach_run {} {
}
}
+
+# This is a test of 'set exec-file-mismatch' handling.
+
+proc_with_prefix do_attach_exec_mismatch_handling_tests {} {
+ global gdb_prompt
+ global binfile
+ global binfile2
+
+ clean_restart $binfile
+
+ # Start two programs that can be attached to.
+ # The first program contains a 'int bidule' variable, the second a 'float bidule'.
+
+ set test_spawn_id [spawn_wait_for_attach $binfile]
+ set testpid [spawn_id_get_pid $test_spawn_id]
+ set test_spawn_id2 [spawn_wait_for_attach $binfile2]
+ set testpid2 [spawn_id_get_pid $test_spawn_id2]
+
+
+ # Test with the default value of 'set exec-file-mismatch load".
+ set test "mismatch load"
+ gdb_test "attach $testpid" "Attaching to program.*" "$test attach1"
+ # Verify that we can "see" the variable "bidule" in the
+ # program, and that it is an integer.
+ gdb_test "ptype bidule" " = int" "$test after attach1, bidule is int"
+ # Detach the process.
+ gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach1"
+ gdb_test_multiple "attach $testpid2" "$test attach2" {
+ -re "Attaching to program.*exec-file-mismatch handling is currently \"ask\".*Load new symbol table from .*attach2\".*\(y or n\)" {
+ pass "$test attach2"
+ }
+ }
+ gdb_test "y" "Reading symbols from .*attach2.*" "$test load attach2"
+ # Verify that we can "see" the variable "bidule" in the
+ # program, and that it is a float.
+ gdb_test "ptype bidule" " = float" "$test after attach2 and load, bidule is float"
+ # Detach the process.
+ gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach attach2"
+
+
+ # Test with 'set exec-file-mismatch warn".
+ set test "mismatch warn"
+ gdb_test_no_output "set exec-file-mismatch warn"
+ gdb_test_multiple "attach $testpid" "$test attach" {
+ -re "Attaching to program.*exec-file-mismatch handling is currently \"warn\".*$gdb_prompt" {
+ pass "$test attach"
+ }
+ }
+ # Verify that we still (wrongly) "see" the variable "bidule" as a float,
+ # as we have not loaded the correct exec-file.
+ gdb_test "ptype bidule" " = float" "$test after attach and warn, bidule is float"
+ # Detach the process.
+ gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach attach"
+
+
+ # Same test but with 'set exec-file-mismatch off".
+ set test "mismatch off"
+ gdb_test_no_output "set exec-file-mismatch off"
+ gdb_test_multiple "attach $testpid" "$test attach" {
+ -re "Attaching to program.*$gdb_prompt" {
+ pass "$test attach"
+ }
+ }
+ # Verify that we still (wrongly) "see" the variable "bidule" as a float,
+ # as we have not warned the user and not loaded the correct exec-file
+ gdb_test "ptype bidule" " = float" "$test after attach and warn, bidule is float"
+ # Detach the process.
+ gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach attach"
+
+
+ # Don't leave a process around
+ kill_wait_spawned_process $test_spawn_id
+ kill_wait_spawned_process $test_spawn_id2
+}
+
do_attach_tests
do_attach_failure_tests
do_call_attach_tests
+do_attach_exec_mismatch_handling_tests
# Test "gdb --pid"
do_command_attach_tests
+
test_command_line_attach_run
return 0
diff --git a/gdb/testsuite/gdb.base/attach2.c b/gdb/testsuite/gdb.base/attach2.c
index a78037e..44d3725 100644
--- a/gdb/testsuite/gdb.base/attach2.c
+++ b/gdb/testsuite/gdb.base/attach2.c
@@ -8,6 +8,7 @@
#include <stdlib.h>
#include <unistd.h>
+float bidule = 0.0;
int should_exit = 0;
int main ()