old-cross-binutils/gdb/testsuite/gdb.multi/base.exp
Pedro Alves 7e0aa6aa99 List inferiors/threads/pspaces in ascending order
Before:
  (gdb) info threads
    Id   Target Id         Frame
    3    Thread 0x7ffff77c3700 (LWP 29035) callme () at foo.c:30
    2    Thread 0x7ffff7fc4700 (LWP 29034) 0x000000000040087b in child_function_2 (arg=0x0) at foo.c:60
  * 1    Thread 0x7ffff7fc5740 (LWP 29030) 0x0000003b37209237 in pthread_join (threadid=140737353893632, thread_return=0x0) at pthread_join.c:92

After:
  (gdb) info threads
    Id   Target Id         Frame
  * 1    Thread 0x7ffff7fc5740 (LWP 29030) 0x0000003b37209237 in pthread_join (threadid=140737353893632, thread_return=0x0) at pthread_join.c:92
    2    Thread 0x7ffff7fc4700 (LWP 29034) 0x000000000040087b in child_function_2 (arg=0x0) at foo.c:60
    3    Thread 0x7ffff77c3700 (LWP 29035) callme () at foo.c:30

gdb/doc/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* gdb.texinfo (Inferiors and Programs): Adjust "maint info
	program-spaces" example to ascending order listing.
	(Threads): Adjust "info threads" example to ascending order
	listing.
	(Forks): Adjust "info inferiors" example to ascending order
	listing.

gdb/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* inferior.c (add_inferior_silent): Append the new inferior to the
	end of the list.
	* progspace.c (add_program_space): Append the new pspace to the
	end of the list.
	* thread.c (new_thread): Append the new thread to the end of the
	list.

gdb/testsuite/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* gdb.base/foll-exec-mode.exp: Adjust to GDB listing inferiors and
	threads in ascending order.
	* gdb.base/foll-fork.exp: Likewise.
	* gdb.base/foll-vfork.exp: Likewise.
	* gdb.base/multi-forks.exp: Likewise.
	* gdb.mi/mi-nonstop.exp: Likewise.
	* gdb.mi/mi-nsintrall.exp: Likewise.
	* gdb.multi/base.exp: Likewise.
	* gdb.multi/multi-arch.exp: Likewise.
	* gdb.python/py-inferior.exp: Likewise.
	* gdb.threads/break-while-running.exp: Likewise.
	* gdb.threads/execl.exp: Likewise.
	* gdb.threads/gcore-thread.exp: Likewise.
	* gdb.threads/info-threads-cur-sal.exp: Likewise.
	* gdb.threads/kill.exp: Likewise.
	* gdb.threads/linux-dp.exp: Likewise.
	* gdb.threads/multiple-step-overs.exp: Likewise.
	* gdb.threads/next-bp-other-thread.exp: Likewise.
	* gdb.threads/step-bg-decr-pc-switch-thread.exp: Likewise.
	* gdb.threads/step-over-lands-on-breakpoint.exp: Likewise.
	* gdb.threads/step-over-trips-on-watchpoint.exp: Likewise.
	* gdb.threads/thread-find.exp: Likewise.
	* gdb.threads/tls.exp: Likewise.
	* lib/mi-support.exp (mi_reverse_list): Delete.
	(mi_check_thread_states): No longer reverse list.
2015-11-24 18:36:31 +00:00

189 lines
4.5 KiB
Text

# Copyright 2009-2015 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 3 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, see <http://www.gnu.org/licenses/>.
# Test multi-exec / multi-process features that work for all configurations,
# even ones that cannot run multiple processes simultaneously.
set testfile "base"
set exec1 "hello"
set srcfile1 ${exec1}.c
set binfile1 [standard_output_file ${exec1}]
set exec2 "hangout"
set srcfile2 ${exec2}.c
set binfile2 [standard_output_file ${exec2}]
set exec3 "goodbye"
set srcfile3 ${exec3}.c
set binfile3 [standard_output_file ${exec3}]
if { [build_executable ${testfile}.exp ${exec1} "${srcfile1}" {debug nowarnings}] == -1 } {
return -1
}
if { [build_executable ${testfile}.exp ${exec2} "${srcfile2}" {debug nowarnings}] == -1} {
return -1
}
if { [build_executable ${testfile}.exp ${exec3} "${srcfile3}" {debug nowarnings}] == -1 } {
return -1
}
clean_restart ${exec1}
# Add an empty inferior space, switch to it, and load a main
# executable into it.
gdb_test "add-inferior" "Added inferior 2.*" "add empty inferior 2"
gdb_test "inferior 2" "Switching to inferior 2.*" "switch to inferior 2"
gdb_test "file ${binfile2}" ".*" "load ${exec2} file in inferior 2"
# Add a new inferior space and load a main executable into it in one
# command.
gdb_test "add-inferior -exec ${binfile3}" \
"Added inferior 3.*" \
"add inferior 3 with -exec ${exec3}"
# Check that we have multiple spaces.
gdb_test "info inferiors" \
"Executable.*${exec1}.*${exec2}.*${exec3}.*"
# Test info inferiors with args
set see1 0
set see2 0
set see3 0
gdb_test_multiple "info inferior 2 3" "info inferior 2 3" {
-re ". 1 \[^\r\n\]*${exec1}" {
set see1 1
exp_continue
}
-re ". 2 \[^\r\n\]*${exec2}" {
set see2 1
exp_continue
}
-re ". 3 \[^\r\n\]*${exec3}" {
set see3 1
exp_continue
}
-re "$gdb_prompt $" {
if { !$see1 && $see2 && $see3 } then {
pass "info inferior 2 3"
} else {
fail "info inferior 2 3"
}
}
}
set see1 0
set see2 0
set see3 0
gdb_test_multiple "info inferior 1-2" "info inferior 1-2" {
-re ". 1 \[^\r\n\]*${exec1}" {
set see1 1
exp_continue
}
-re ". 2 \[^\r\n\]*${exec2}" {
set see2 1
exp_continue
}
-re ". 3 \[^\r\n\]*${exec3}" {
set see3 1
exp_continue
}
-re "$gdb_prompt $" {
if { $see1 && $see2 && !$see3 } then {
pass "info inferior 1-2"
} else {
fail "info inferior 1-2"
}
}
}
# Test that we have multiple symbol tables.
gdb_test "inferior 1" ".*" "switch to inferior 1"
gdb_test "info functions commonfun" \
"${srcfile1}.*" \
"'info functions commonfun' in inferior 1"
gdb_test "inferior 3" ".*" "switch to inferior 3"
gdb_test "info functions commonfun" \
"${srcfile3}.*" \
"'info functions commonfun' in inferior 3"
gdb_test "inferior 1" ".*" "switch back to inferior 1"
gdb_test_no_output "set listsize 1"
gdb_test "list commonfun" "from hello.*" "list commonfun in hello"
gdb_test "print hglob" "1"
gdb_test "print glob" "92" "print glob (${exec1})"
gdb_test "inferior 3" ".*" "switch to inferior 3 to print globals"
gdb_test "print gglob" "2"
gdb_test "print glob" "45" "print glob (${exec3})"
gdb_test "list commonfun" "from goodbye.*" "list commonfun in goodbye"
# Let's run the hello program.
gdb_test "inferior 1" ".*" "switch to inferior 1 to run it"
if { ![runto_main] } then {
return -1
}
gdb_test "break hello" ".*"
gdb_test "continue" "Breakpoint \[0-9\].*, hello.*"
# Now let's remove the other two
gdb_test_no_output "remove-inferiors 2-3" "remove-inferiors 2-3"
set see1 0
set see2 0
set see3 0
gdb_test_multiple "info inferiors" "check remove-inferiors" {
-re ". 3 \[^\r\n\]*${exec3}" {
set see3 1
exp_continue
}
-re ". 2 \[^\r\n\]*${exec2}" {
set see2 1
exp_continue
}
-re ". 1 \[^\r\n\]*${exec1}" {
set see1 1
exp_continue
}
-re "$gdb_prompt $" {
if { $see1 && !$see2 && !$see3 } then {
pass "check remove-inferiors"
} else {
fail "check remove-inferiors"
}
}
}