xfail "clang/14563, this test is just too flakey"
return -1
# Copyright 2011, 2012 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/>.

set testfile "info-os"
set srcfile ${testfile}.c

# This test is Linux-only.
if ![istarget *-*-linux*] then {
    unsupported "info-os.exp"
    return -1
}

# Support for XML-output is needed to run this test.
if [gdb_skip_xml_test] then {
    unsupported "info-os.exp"
    return -1
}

# Compile test program.
if { [prepare_for_testing ${testfile}.exp $testfile $srcfile {debug additional_flags=-lpthread}] } {
    fail "cannot compile test program"
    return -1
}

if ![runto_main] then {
    fail "cannot run to main"
    return -1;
}

# Get PID of test program.
set inferior_pid -1
set test "get inferior process ID"
gdb_test_multiple "call getpid()" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set inferior_pid $expect_out(1,string)
	pass $test
    }
}

gdb_breakpoint ${srcfile}:[gdb_get_line_number "Set breakpoint here"]
gdb_continue_to_breakpoint "Set breakpoint here"

# Get keys and IDs of the IPC object instances.
set shmkey -1
set test "get shared memory key"
gdb_test_multiple "print shmkey" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set shmkey $expect_out(1,string)
	pass $test
    }
}
set shmid -1
set test "get shared memory ID"
gdb_test_multiple "print shmid" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set shmid $expect_out(1,string)
	pass $test
    }
}

set semkey -1
set test "get semaphore key"
gdb_test_multiple "print semkey" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set semkey $expect_out(1,string)
	pass $test
    }
}

set semid -1
set test "get semaphore ID"
gdb_test_multiple "print semid" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set semid $expect_out(1,string)
	pass $test
    }
}

set msgkey -1
set test "get message queue key"
gdb_test_multiple "print msgkey" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set msgkey $expect_out(1,string)
	pass $test
    }
}

set msqid -1
set test "get message queue ID"
gdb_test_multiple "print msqid" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set msqid $expect_out(1,string)
	pass $test
    }
}

# Get port number of test socket.
set port -1
set test "get socket port number"
gdb_test_multiple "print port" $test {
    -re ".* = ($decimal).*$gdb_prompt $" {
	set port $expect_out(1,string)
	pass $test
    }
}

# Act like gdb_test but prevent: +ERROR: internal buffer is full.

proc expect_multiline { command expect test } {
    global gdb_prompt

    # Do not duplicate FAILs from gdb_test_multiple.
    set pass 0
    set fail 0
    gdb_test_multiple $command $test {
	-re "^$expect *\r\n" {
	    pass $test
	    set pass 1
	    exp_continue
	}
	-re "^$gdb_prompt $" {
	    if !$pass {
		set fail 1
	    }
	    # Exit the loop.
	}
	-re "\r\n" {
	    # Drop the buffer.
	    exp_continue
	}
    }
    if $fail {
	fail $test
    }
}

# Test output of the 'info os' commands against the expected results.

#                                     pid            user  command      cores
expect_multiline "info os processes" "$inferior_pid +\\S+ +\\S*info-os +\[0-9,\]+" "get process list"

#                                      pgid           leader   pid            command line
expect_multiline "info os procgroups" "$inferior_pid +info-os +$inferior_pid +\\S*info-os" "get process groups"

#                                   pid            command  tid   core
expect_multiline "info os threads" "$inferior_pid +info-os +\\d+ +\\d+" "get threads"

#                                 pid            command  fd    name
expect_multiline "info os files" "$inferior_pid +info-os +\\d+ +/dev/null" "get file descriptors"

#                                   local address  l-port remote addr r-port state  user family protocol
expect_multiline "info os sockets" "0\\.0\\.0\\.0 +$port +0\\.0\\.0\\.0 +0 +LISTEN +\\S+ +INET +STREAM" "get internet-domain sockets"

#                               key   shmid   perm size creator command last op  command  num attached  user  group  creator user  creator group  last shmat() time  last shmdt() time  last shmctl() time
expect_multiline "info os shm" "$shmkey +$shmid +666 +4096 +info-os .*" "get shared-memory regions"

#                                      key   semid   perm num semaphores  user  group  creator user  creator group  last semop() time  last semctl() time
expect_multiline "info os semaphores" "$semkey +$semid +666 +1 .*" "get semaphores"

#                               key   msqid   perm  num used bytes  num messages  last msgsnd() command  last msgrcv() command  user  group  creator user  creator group  last msgsnd() time  last msgrcv() time  last msgctl() time
expect_multiline "info os msg" "$msgkey +$msqid +666 .*" "get message queues"


# The SysV IPC primitives linger on after the creating process is killed
# unless they are destroyed explicitly, so allow the test program to tidy
# up after itself.
send_gdb "continue\n"
