Skip to content
Snippets Groups Projects
  • Pedro Alves's avatar
    41e99568
    gdb.base/reread.exp: Really restart GDB · 41e99568
    Pedro Alves authored
    The other day I noticed that default_gdb_start reuses the GDB process
    if it has been spawned already:
    
    proc default_gdb_start { } {
    ...
        if [info exists gdb_spawn_id] {
    	return 0
        }
    
    I was a bit surprised, and so I hacked in an error to check whether
    anything is relying on it:
    
     + if [info exists gdb_spawn_id] {
     +    error "GDB already spawned"
     + }
    
    And lo, that tripped on a funny buglet (see below).  The comment in
    reread.exp says "Restart GDB entirely", but in reality, due to the
    above, that's not what is happening, as a gdb_exit call is missing.
    The test is proceeding with the previous GDB process...
    
    I don't really want to go hunt for whether there's an odd setup out
    there that assumes this in its board file or something, so for now,
    I'm taking the simple route of just making the test do what it says it
    does.  I think this much makes it an obvious fix.
    
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     (gdb) PASS: gdb.base/reread.exp: run to foo() second time
     ERROR: tcl error sourcing ../src/gdb/testsuite/gdb.base/reread.exp.
     ERROR: GDB already spawned
         while executing
     "error "GDB already spawned""
         invoked from within
     "if [info exists gdb_spawn_id] {
    	 error "GDB already spawned"
         }"
         (procedure "default_gdb_start" line 22)
         invoked from within
     "default_gdb_start"
         (procedure "gdb_start" line 2)
         invoked from within
     "gdb_start"
         invoked from within
     "if [is_remote target] {
         unsupported "second pass: GDB should check for changes before running"
     } else {
    
         # Put the older executable back in pl..."
         (file "../src/gdb/testsuite/gdb.base/reread.exp" line 114)
         invoked from within
     "source ../src/gdb/testsuite/gdb.base/reread.exp"
         ("uplevel" body line 1)
         invoked from within
     "uplevel #0 source ../src/gdb/testsuite/gdb.base/reread.exp"
         invoked from within
     "catch "uplevel #0 source $test_file_name""
     testcase ../src/gdb/testsuite/gdb.base/reread.exp completed in 1 seconds
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    gdb/testsuite/
    2014-07-15  Pedro Alves  <palves@redhat.com>
    
    	* gdb.base/reread.exp: Use clean_restart.
    41e99568
    History
    gdb.base/reread.exp: Really restart GDB
    Pedro Alves authored
    The other day I noticed that default_gdb_start reuses the GDB process
    if it has been spawned already:
    
    proc default_gdb_start { } {
    ...
        if [info exists gdb_spawn_id] {
    	return 0
        }
    
    I was a bit surprised, and so I hacked in an error to check whether
    anything is relying on it:
    
     + if [info exists gdb_spawn_id] {
     +    error "GDB already spawned"
     + }
    
    And lo, that tripped on a funny buglet (see below).  The comment in
    reread.exp says "Restart GDB entirely", but in reality, due to the
    above, that's not what is happening, as a gdb_exit call is missing.
    The test is proceeding with the previous GDB process...
    
    I don't really want to go hunt for whether there's an odd setup out
    there that assumes this in its board file or something, so for now,
    I'm taking the simple route of just making the test do what it says it
    does.  I think this much makes it an obvious fix.
    
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     (gdb) PASS: gdb.base/reread.exp: run to foo() second time
     ERROR: tcl error sourcing ../src/gdb/testsuite/gdb.base/reread.exp.
     ERROR: GDB already spawned
         while executing
     "error "GDB already spawned""
         invoked from within
     "if [info exists gdb_spawn_id] {
    	 error "GDB already spawned"
         }"
         (procedure "default_gdb_start" line 22)
         invoked from within
     "default_gdb_start"
         (procedure "gdb_start" line 2)
         invoked from within
     "gdb_start"
         invoked from within
     "if [is_remote target] {
         unsupported "second pass: GDB should check for changes before running"
     } else {
    
         # Put the older executable back in pl..."
         (file "../src/gdb/testsuite/gdb.base/reread.exp" line 114)
         invoked from within
     "source ../src/gdb/testsuite/gdb.base/reread.exp"
         ("uplevel" body line 1)
         invoked from within
     "uplevel #0 source ../src/gdb/testsuite/gdb.base/reread.exp"
         invoked from within
     "catch "uplevel #0 source $test_file_name""
     testcase ../src/gdb/testsuite/gdb.base/reread.exp completed in 1 seconds
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    gdb/testsuite/
    2014-07-15  Pedro Alves  <palves@redhat.com>
    
    	* gdb.base/reread.exp: Use clean_restart.
To find the state of this project's repository at the time of any of these versions, check out the tags.