# Copyright (C) 2013-2021 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/>.

standard_testfile info-threads-cur-sal.c info-threads-cur-sal-2.c

set executable ${testfile}

if {[gdb_compile_pthreads \
	 "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" \
	 "${binfile}" executable {debug}] != "" } {
    return -1
}

clean_restart ${executable}

if ![runto_main] {
    return -1
}

gdb_breakpoint "start"
gdb_continue_to_breakpoint "start"

set line [gdb_get_line_number "should show this line" "${srcfile2}"]

gdb_test "list $line" \
    "\"list\" should show this line.*" \
    "list before info threads"

# There used to be a bug where "info threads" would set the current
# SAL to the location of the last thread displayed.
gdb_test "info threads" \
    [multi_line \
	 "\[ \t\]*Id\[ \t\]+Target\[ \t\]+Id\[ \t\]+Frame\[ \t\]*" \
	 "  1 *Thread \[^\r\n\]* .* \[^\r\n\]*" \
	 "\\* 2 *Thread \[^\r\n\]* at \[^\r\n\]*"] \
    "info threads before break"

# Check that "break" is still operating on the same file by default.
gdb_test "break $line" ".*${srcfile2}.*" "break on line"

gdb_test "info threads" \
    [multi_line \
	 "\[ \t\]*Id\[ \t\]+Target\[ \t\]+Id\[ \t\]+Frame\[ \t\]*" \
	 "  1 *Thread \[^\r\n\]* .* \[^\r\n\]*" \
	 "\\* 2 *Thread \[^\r\n\]* at \[^\r\n\]*"] \
    "info threads before list"

# And that so is "list".
gdb_test "list $line" \
    "\"list\" should show this line.*" \
    "list after info threads"
