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

# This file is part of the GDB testsuite.  It tests the mechanism
# exposing inferiors to Python.

load_lib gdb-python.exp

standard_testfile

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

# Start with a fresh gdb.
clean_restart ${testfile}

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

gdb_test_multiple "show endian" "getting target endian" {
    -re ".*little endian.*$gdb_prompt $" {
        set python_pack_char "<"
	# pass silently
    }
    -re ".*big endian.*$gdb_prompt $" {
        set python_pack_char ">"
	# pass silently
    }
}

# The following tests require execution.

if ![runto_main] then {
    fail "Can't run to main"
    return 0
}

# Test basic gdb.Inferior attributes and methods.

gdb_py_test_silent_cmd "python inferiors = gdb.inferiors ()" "get inferiors list" 1
gdb_test "python print inferiors" "\\(<gdb.Inferior object at 0x\[\[:xdigit:\]\]+>,\\)" "verify inferiors list"
gdb_py_test_silent_cmd "python i0 = inferiors\[0\]" "get first inferior" 0

gdb_test "python print 'result =', i0 == inferiors\[0\]" " = True" "test equality comparison (true)"
gdb_test "python print 'result =', i0.num" " = \[0-9\]+" "test Inferior.num"
gdb_test "python print 'result =', i0.pid" " = \[0-9\]+" "test Inferior.pid"
gdb_test "python print 'result =', i0.was_attached" " = False" "test Inferior.was_attached"
gdb_test "python print i0.threads ()" "\\(<gdb.InferiorThread object at 0x\[\[:xdigit:\]\]+>,\\)" "test Inferior.threads"

# Test the number of inferior threads.

gdb_breakpoint check_threads
gdb_continue_to_breakpoint "cont to check_threads" ".*pthread_barrier_wait.*"
gdb_test "python print len (i0.threads ())" "\r\n9" "test Inferior.threads 2"

# Proceed to the next test.

gdb_breakpoint [gdb_get_line_number "Break here."]
gdb_continue_to_breakpoint "cont to Break here." ".*Break here\..*"

# Test memory read and write operations.

gdb_py_test_silent_cmd "python addr = gdb.selected_frame ().read_var ('str')" \
  "read str address" 0
gdb_py_test_silent_cmd "python str = gdb.inferiors()\[0\].read_memory (addr, 5)" \
  "read str contents" 1
gdb_py_test_silent_cmd "python str\[1\] = 'a'" "change str" 0
gdb_py_test_silent_cmd "python gdb.inferiors()\[0\].write_memory (addr, str)" \
  "write str" 1
gdb_test "print str" " = \"hallo, testsuite\"" \
  "ensure str was changed in the inferior"

# Test memory search.

set hex_number {0x[0-9a-fA-F][0-9a-fA-F]*}
set dec_number {[0-9]+}
set history_prefix {[$][0-9]* = }
set newline {[\r\n]+}
set pattern_not_found "${newline}.None"
set one_pattern_found "${newline}.${dec_number}"

# Test string pattern.

gdb_test "set *(int32_t*) &int8_search_buf\[10\] = 0x61616161" "" ""
gdb_test "py search_buf = gdb.selected_frame ().read_var ('int8_search_buf')" "" ""
gdb_test_no_output "py start_addr = search_buf.address"
gdb_test_no_output "py length = search_buf.type.sizeof"

gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, 'aaa')" \
  "${one_pattern_found}" "find string pattern"

# Test not finding pattern because search range too small, with
# potential find at the edge of the range.

gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, 10+3, 'aaaa')" \
  "${pattern_not_found}" "pattern not found at end of range"

# Increase the search range by 1 and we should find the pattern.

gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, 10+3+1, 'aaa')" \
  "${one_pattern_found}" "pattern found at end of range"

# Import struct to pack the following patterns.
gdb_test_no_output "py from struct import *"

# Test 16-bit pattern.

gdb_test_no_output "set int16_search_buf\[10\] = 0x1234"
gdb_test_no_output "py search_buf = gdb.selected_frame ().read_var ('int16_search_buf')"
gdb_test_no_output "py start_addr = search_buf.address"
gdb_test_no_output "py length = search_buf.type.sizeof"
gdb_test_no_output "py pattern = pack('${python_pack_char}H',0x1234)"

gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, pattern)" \
  "${one_pattern_found}" "find 16-bit pattern, with value pattern"

# Test 32-bit pattern.

gdb_test_no_output "set int32_search_buf\[10\] = 0x12345678"
gdb_test_no_output "py search_buf = gdb.selected_frame ().read_var ('int32_search_buf')"
gdb_test_no_output "py start_addr = search_buf.address"
gdb_test_no_output "py length = search_buf.type.sizeof"
gdb_test_no_output "py pattern = pack('${python_pack_char}I',0x12345678)"

gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, pattern)" \
  "${one_pattern_found}" "find 32-bit pattern, with python pattern"

# Test 64-bit pattern.

gdb_test_no_output "set int64_search_buf\[10\] = 0xfedcba9876543210LL"
gdb_test_no_output "py search_buf = gdb.selected_frame ().read_var ('int64_search_buf')"
gdb_test_no_output "py start_addr = search_buf.address"
gdb_test_no_output "py length = search_buf.type.sizeof"
gdb_test_no_output "py pattern = pack('${python_pack_char}Q', 0xfedcba9876543210)"

gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, length, pattern)" \
  "${one_pattern_found}" "find 64-bit pattern, with value pattern"

# Test mixed-sized patterns.

gdb_test_no_output "set *(int8_t*) &search_buf\[10\] = 0x62"
gdb_test_no_output "set *(int16_t*) &search_buf\[11\] = 0x6363"
gdb_test_no_output "set *(int32_t*) &search_buf\[13\] = 0x64646464"
gdb_test_no_output "py search_buf = gdb.selected_frame ().read_var ('search_buf')"
gdb_test_no_output "py start_addr = search_buf\[0\].address"
gdb_test_no_output "py pattern1 = pack('B', 0x62)"
gdb_test_no_output "py pattern2 = pack('${python_pack_char}H', 0x6363)"
gdb_test_no_output "py pattern3 = pack('${python_pack_char}I', 0x64646464)"

gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, 100, pattern1)" \
    "${one_pattern_found}" "find mixed-sized pattern"
gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, 100, pattern2)" \
    "${one_pattern_found}" "find mixed-sized pattern"
gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, 100, pattern3)" \
    "${one_pattern_found}" "find mixed-sized pattern"

# Test search spanning a large range, in the particular case of native
# targets, test the search spanning multiple chunks.
# Remote targets may implement the search differently.

set CHUNK_SIZE 16000 ;

gdb_test_no_output "set *(int32_t*) &search_buf\[0*${CHUNK_SIZE}+100\] = 0x12345678"
gdb_test_no_output "set *(int32_t*) &search_buf\[1*${CHUNK_SIZE}+100\] = 0x12345678"
gdb_test_no_output "py start_addr = gdb.selected_frame ().read_var ('search_buf')"
gdb_test_no_output "py end_addr = start_addr + gdb.selected_frame ().read_var ('search_buf_size')"
gdb_test_no_output "py pattern = pack('${python_pack_char}I', 0x12345678)"
gdb_test_no_output "py first = gdb.inferiors()\[0\].search_memory (start_addr,end_addr - start_addr, pattern)"
gdb_test "py print first" "${one_pattern_found}" "search spanning large range 1st result"
gdb_test_no_output "py start_addr = first + 1"
gdb_test_no_output "py second = gdb.inferiors()\[0\].search_memory (start_addr, end_addr - start_addr, pattern)"
gdb_test "py print second" "${one_pattern_found}" "search spanning large range 2nd result"
gdb_test_no_output "py start_addr = second + 1"
gdb_test_no_output "py third = gdb.inferiors()\[0\].search_memory (start_addr, end_addr - start_addr, pattern)"
gdb_test "py print third" "${pattern_not_found}" "search spanning large range 3rd result"

# For native targets, test a pattern straddling a chunk boundary.

if [isnative] {
    gdb_test_no_output "set *(int32_t*) &search_buf\[${CHUNK_SIZE}-1\] = 0xfdb97531"
    gdb_test_no_output "py pattern = pack('${python_pack_char}I', 0xfdb97531)"
    gdb_test_no_output "py start_addr = gdb.selected_frame ().read_var ('search_buf')"
    gdb_test "py print gdb.inferiors()\[0\].search_memory (start_addr, end_addr - start_addr, pattern)" \
      "${one_pattern_found}" "find pattern straddling chunk boundary"
}

# Test Inferior is_valid.  This must always be the last test in
# this testcase as it kills the inferior.

gdb_py_test_silent_cmd "python inf_list = gdb.inferiors()" "get initial list" 1
gdb_test "python print len(inf_list)" "1" "Get inferior list length"
gdb_test "python print inf_list\[0\].is_valid()" "True" \
         "Check inferior validity"
gdb_test "add-inferior" "Added inferior 2.*" "add empty inferior 2"
gdb_py_test_silent_cmd "python inf_list = gdb.inferiors()" "get new list" 1
gdb_test "python print len(inf_list)" "2" "Get inferior list length"
gdb_test "python print inf_list\[0\].is_valid()" "True" \
         "Check inferior validity"
gdb_test "python print inf_list\[1\].is_valid()" "True" \
         "Check inferior validity"
gdb_test_no_output "remove-inferiors 2" "remove-inferiors 3"
gdb_test "python print inf_list\[0\].is_valid()" "False" \
         "Check inferior validity"
gdb_test "python print inf_list\[1\].is_valid()" "True" \
         "Check inferior validity"

# Test gdb.selected_inferior()
gdb_test "inferior 1" ".*" "Switch to first inferior"
gdb_test "py print gdb.selected_inferior().num" "1" "First inferior selected"

gdb_test "add-inferior" "Added inferior 3" "Create new inferior"
gdb_test "inferior 3" ".*" "Switch to third inferior"
gdb_test "py print gdb.selected_inferior().num" "3" "Third inferior selected"
gdb_test "inferior 1" ".*" "Switch to first inferior"
gdb_test_no_output "remove-inferiors 3" "Remove second inferior"
