# Copyright (C) 2010-2026 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 values to Python.

load_lib gdb-python.exp

require allow_python_tests

standard_testfile py-symbol.c py-symbol-2.c py-symbol-3.c

set opts { debug additional_flags=-DUSE_TWO_FILES }
if {[prepare_for_testing "failed to prepare" $testfile \
	 [list $srcfile $srcfile2 $srcfile3] $opts]} {
    return -1
}

set readnow_p [readnow]

# Check that we find all static symbols before the inferior has
# started, at which point some of the symtabs might not have been
# expanded.
gdb_test "python print (len (gdb.lookup_static_symbols ('rr')))" \
    "2" "print (len (gdb.lookup_static_symbols ('rr')))"

# This test does not make sense when readnow is in effect.
if {!$readnow_p} {
    # Make sure that the global symbol's symtab was not expanded.
    gdb_test_no_output "pipe maint info symtab | grep \"name.*py-symbol-3.c\"" \
	"global rr symtab was not expanded"
}

# Restart so we don't have expanded symtabs after the previous test.
clean_restart ${::testfile}

# Test looking up a global symbol before we runto_main as this is the
# point where we don't have a current frame, and we don't want to
# require one.
gdb_py_test_silent_cmd "python main_func = gdb.lookup_global_symbol(\"main\")" "Lookup main" 1
gdb_test "python print (repr (main_func))" "<gdb.Symbol print_name=main>" \
    "test main_func.__repr__"
gdb_test "python print (main_func.is_function)" "True" "test main_func.is_function"
gdb_test "python print (gdb.lookup_global_symbol(\"junk\"))" "None" "test lookup_global_symbol(\"junk\")"

gdb_test "python print (gdb.lookup_global_symbol('main').value())" "$hex .main." \
    "print value of main"

set qq_line [gdb_get_line_number "line of qq"]
gdb_test "python print (gdb.lookup_global_symbol('qq').line)" "$qq_line" \
    "print line number of qq"

gdb_test "python print (gdb.lookup_global_symbol('qq').value())" "72" \
    "print value of qq"

gdb_test "python print (gdb.lookup_global_symbol('qq').needs_frame)" \
    "False" \
    "print whether qq needs a frame"

# Similarly, test looking up a static symbol before we runto_main.
gdb_test "python print (gdb.lookup_global_symbol ('qqrr') is None)" "True" \
    "lookup_global_symbol for static var"

# Either "rr" static symbol is a valid result.
set rr_line_1 [gdb_get_line_number "line of rr"]
set rr_line_2 [gdb_get_line_number "line of other rr" py-symbol-2.c]
gdb_test "python print (gdb.lookup_static_symbol ('rr').line)" "($rr_line_1|$rr_line_2)"
gdb_test "python print (gdb.lookup_static_symbol ('rr').value ())" "(42|99)"

gdb_test "python print (gdb.lookup_static_symbol ('rr').needs_frame)" \
    "False" \
    "print whether rr needs a frame"

gdb_test "python print (gdb.lookup_static_symbol ('nonexistent') is None)" \
    "True" "lookup_static_symbol for nonexistent var"

gdb_test "python print (gdb.lookup_static_symbol ('qq') is None)" \
    "True" "lookup_static_symbol for global var"

if {![runto_main]} {
    return 0
}

global hex decimal

gdb_breakpoint [gdb_get_line_number "Block break here."]
gdb_continue_to_breakpoint "Block break here."
gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0
gdb_py_test_silent_cmd "python block = frame.block()" "Get block" 0

# Test is_argument attribute.
gdb_py_test_silent_cmd "python arg = gdb.lookup_symbol(\"arg\")" "Get variable arg" 0
gdb_test "python print (arg\[0\].is_variable)" "False" "test arg.is_variable"
gdb_test "python print (arg\[0\].is_constant)" "False" "test arg.is_constant"
gdb_test "python print (arg\[0\].is_argument)" "True" "test arg.is_argument"
gdb_test "python print (arg\[0\].is_function)" "False" "test arg.is_function"

# Test is_function attribute.
gdb_py_test_silent_cmd "python func = block.function" "Get block function" 0
gdb_test "python print (func.is_variable)" "False" "test func.is_variable"
gdb_test "python print (func.is_constant)" "False" "test func.is_constant"
gdb_test "python print (func.is_argument)" "False" "test func.is_argument"
gdb_test "python print (func.is_function)" "True" "test func.is_function"

# Test attributes of func.
gdb_test "python print (func.name)" "func" "test func.name"
gdb_test "python print (func.print_name)" "func" "test func.print_name"
gdb_test "python print (func.linkage_name)" "func" "test func.linkage_name"
gdb_test "python print (func.addr_class == gdb.SYMBOL_LOC_BLOCK)" "True" "test func.addr_class"
gdb_test "python print (func.domain == gdb.SYMBOL_FUNCTION_DOMAIN)" "True" "test func.domain"

# Stop in a second file and ensure we find its local static symbol.
gdb_breakpoint "function_in_other_file"
gdb_continue_to_breakpoint "function_in_other_file"
gdb_test "python print (gdb.lookup_static_symbol ('rr').value ())" "99" \
    "print value of rr from other file"
# GDB doesn't really guarantee the order of these, so sort the values.
gdb_test_no_output "python rrs = gdb.lookup_static_symbols ('rr')" \
    "fetch all rr symbols, from the other file"
gdb_test "python print (sorted(\[int(x.value()) for x in rrs\]))" \
    "\\\[42, 99\\\]" \
    "print values of all 'rr' symbols, from the other file"

# Now continue back to the first source file.
set linenum [gdb_get_line_number "Break at end."]
gdb_breakpoint "$srcfile:$linenum"
gdb_continue_to_breakpoint "Break at end for variable a" ".*Break at end.*"
gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0

# Check that we find the static sybol local to this file over the
# static symbol from the second source file.
gdb_test "python print (gdb.lookup_static_symbol ('rr').value ())" "42" \
    "print value of rr from main file"
# This should be consistent with the first file.
gdb_test_no_output "python rrs = gdb.lookup_static_symbols ('rr')" \
    "fetch all rr symbols, from the main file"
gdb_test "python print (sorted(\[int(x.value()) for x in rrs\]))" \
    "\\\[42, 99\\\]" \
    "print values of all 'rr' symbols, from the main file"

# Test is_variable attribute.
gdb_py_test_silent_cmd "python a = gdb.lookup_symbol(\'a\')" "Get variable a" 0
gdb_test "python print (a\[0\].is_variable)" "True" "test a.is_variable"
gdb_test "python print (a\[0\].is_constant)" "False" "test a.is_constant"
gdb_test "python print (a\[0\].is_argument)" "False" "test a.is_argument"
gdb_test "python print (a\[0\].is_function)" "False" "test a.is_function"

# Test attributes of a.
gdb_test "python print (a\[0\].addr_class == gdb.SYMBOL_LOC_COMPUTED)" "True" "test a.addr_class"

gdb_test "python print (a\[0\].value())" \
    "symbol requires a frame to compute its value.*"\
    "try to print value of a without a frame"
gdb_test "python print (a\[0\].value(frame))" "0" \
    "print value of a"
gdb_test "python print (a\[0\].needs_frame)" "True" \
    "print whether a needs a frame"

# Test is_constant attribute
gdb_py_test_silent_cmd "python t = gdb.lookup_symbol(\"one\")" "Get constant t" 0
gdb_test "python print (t\[0\].is_variable)" "False" "test t.is_variable"
gdb_test "python print (t\[0\].is_constant)" "True" "test t.is_constant"
gdb_test "python print (t\[0\].is_argument)" "False" "test t.is_argument"
gdb_test "python print (t\[0\].is_function)" "False" "test t.is_function"

# Test attributes of t.
gdb_test "python print (t\[0\].addr_class == gdb.SYMBOL_LOC_CONST)" "True" "test t.addr_class"

# Test type attribute.
gdb_test "python print (t\[0\].type)" "enum tag" "get type"

# Test symtab attribute.
if { [is_remote host] } {
    set py_symbol_c [string_to_regexp $srcfile]
} else {
    set py_symbol_c [string_to_regexp ${srcdir}/${subdir}/${srcfile}]
}
gdb_test "python print (t\[0\].symtab)" "${py_symbol_c}" "get symtab"

# C++ tests
# Recompile binary.
lappend opts c++
set testfile $testfile-cxx
set binfile [standard_output_file $testfile]
if { [prepare_for_testing "failed to prepare" $testfile \
	  [list $srcfile $srcfile2] $opts] } {
    return -1
}

gdb_test "python print (gdb.lookup_global_symbol ('(anonymous namespace)::anon') is None)" \
    "True" "anon is None"
gdb_test "python print (gdb.lookup_static_symbol ('(anonymous namespace)::anon').value ())" \
    "10" "print value of anon"

if {![runto_main]} {
    return 0
}

gdb_breakpoint [gdb_get_line_number "Break in class."]
gdb_continue_to_breakpoint "Break in class."

gdb_py_test_silent_cmd "python cplusframe = gdb.selected_frame()" "Get Frame at class" 0
gdb_py_test_silent_cmd "python cplusfunc = cplusframe.block().function" "Get function at class" 0

gdb_test "python print (cplusfunc.is_variable)" \
    "False" "Test cplusfunc.is_variable"
gdb_test "python print (cplusfunc.is_constant)" \
    "False" "Test cplusfunc.is_constant"
gdb_test "python print (cplusfunc.is_argument)" \
    "False" "Test cplusfunc.is_argument"
gdb_test "python print (cplusfunc.is_function)" \
    "True" "Test cplusfunc.is_function"

gdb_test "python print (cplusfunc.name)" "SimpleClass::valueofi().*" "test method.name"
gdb_test "python print (cplusfunc.print_name)" "SimpleClass::valueofi().*" "test method.print_name"
gdb_test "python print (cplusfunc.linkage_name)" "_ZN11SimpleClass8valueofiEv.*" "test method.linkage_name"
gdb_test "python print (cplusfunc.addr_class == gdb.SYMBOL_LOC_BLOCK)" "True" "test method.addr_class"

# Test is_valid when the objfile is unloaded.  This must be the last
# test as it unloads the object file in GDB.
# Start with a fresh gdb.
clean_restart ${::testfile}
if {![runto_main]} {
    return 0
}

gdb_breakpoint [gdb_get_line_number "Break at end."]
gdb_continue_to_breakpoint "Break at end for symbol validity" ".*Break at end.*"
gdb_py_test_silent_cmd "python a = gdb.lookup_symbol(\'a\')" "Get variable a" 0
gdb_test "python print (a\[0\].is_valid())" "True" "test symbol validity"
delete_breakpoints
gdb_unload
gdb_test "python print (a\[0\].is_valid())" "False" "test symbol non-validity"
gdb_test_no_output "python a = None" "test symbol destructor"

# Test gdb.Symbol domain categories
gdb_test "python print (gdb.SYMBOL_UNDEF_DOMAIN)" \
    "0" "test gdb.SYMBOL_UNDEF_DOMAIN"
gdb_test "python print (gdb.SYMBOL_VAR_DOMAIN)" \
    "1" "test gdb.SYMBOL_VAR_DOMAIN"
gdb_test "python print (gdb.SYMBOL_STRUCT_DOMAIN)" \
    "2" "test gdb.SYMBOL_STRUCT_DOMAIN"
gdb_test "python print (gdb.SYMBOL_MODULE_DOMAIN)" \
    "3" "test gdb.SYMBOL_MODULE_DOMAIN"
gdb_test "python print (gdb.SYMBOL_LABEL_DOMAIN)" \
    "4" "test gdb.SYMBOL_LABEL_DOMAIN"
gdb_test "python print (gdb.SYMBOL_COMMON_BLOCK_DOMAIN)" \
    "5" "test gdb.SYMBOL_COMMON_BLOCK_DOMAIN"

# Test gdb.Symbol address class categories
gdb_test "python print (gdb.SYMBOL_LOC_UNDEF)" \
    "0" "test gdb.SYMBOL_LOC_UNDEF"
gdb_test "python print (gdb.SYMBOL_LOC_CONST)" \
    "1" "test gdb.SYMBOL_LOC_CONST"
gdb_test "python print (gdb.SYMBOL_LOC_STATIC)" \
    "2" "test gdb.SYMBOL_LOC_STATIC"
gdb_test "python print (gdb.SYMBOL_LOC_REGISTER)" \
    "3" "test gdb.SYMBOL_LOC_REGISTER"
gdb_test "python print (gdb.SYMBOL_LOC_ARG)" \
    "4" "test gdb.SYMBOL_LOC_ARG"
gdb_test "python print (gdb.SYMBOL_LOC_REF_ARG)" \
    "5" "test gdb.SYMBOL_LOC_REF_ARG"
gdb_test "python print (gdb.SYMBOL_LOC_REGPARM_ADDR)" \
    "6" "test gdb.SYMBOL_LOC_REGPARM_ADDR"
gdb_test "python print (gdb.SYMBOL_LOC_LOCAL)" \
    "7" "test gdb.SYMBOL_LOC_LOCAL"
gdb_test "python print (gdb.SYMBOL_LOC_TYPEDEF)" \
    "8" "test gdb.SYMBOL_LOC_TYPEDEF"
gdb_test "python print (gdb.SYMBOL_LOC_LABEL)" \
    "9" "test gdb.SYMBOL_LOC_LABEL"
gdb_test "python print (gdb.SYMBOL_LOC_BLOCK)" \
    "10" "test gdb.SYMBOL_LOC_BLOCK"
gdb_test "python print (gdb.SYMBOL_LOC_CONST_BYTES)" \
    "11" "test gdb.SYMBOL_LOC_CONST_BYTES"
gdb_test "python print (gdb.SYMBOL_LOC_UNRESOLVED)" \
    "12" "test gdb.SYMBOL_LOC_UNRESOLVED"
gdb_test "python print (gdb.SYMBOL_LOC_OPTIMIZED_OUT)" \
    "13" "test gdb.SYMBOL_LOC_OPTIMIZED_OUT"
gdb_test "python print (gdb.SYMBOL_LOC_COMPUTED)" \
    "14" "test gdb.SYMBOL_LOC_COMPUTED"
gdb_test "python print (gdb.SYMBOL_LOC_COMMON_BLOCK)" \
    "15" "test gdb.SYMBOL_LOC_COMMON_BLOCK"
