# Copyright (C) 2024-2024 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 . # This file is part of the GDB testsuite. It tests the compunit # support in Python. load_lib gdb-python.exp require allow_python_tests standard_testfile py-objfile.c if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { return -1 } if {![runto_main]} { return 0 } set python_error_text "Error occurred in Python.*" gdb_py_test_silent_cmd "python sym = gdb.lookup_symbol(\"some_var\")" \ "Find a symbol in objfile" 1 gdb_py_test_silent_cmd "python objfile = sym\[0\].symtab.objfile" \ "Get backing object file" 1 gdb_test "python print (len(objfile.compunits()) > 0)" \ "True" \ "Get objfile compunits" gdb_test "python print (objfile.compunits())" \ "\\\[\\\]" \ "Objfile compunits return a sequence of gdb.Compunit" gdb_test "python print (objfile.compunits()\[0\] == objfile.compunits()\[0\])" \ "True" \ "Compunits are comparable" gdb_test "python print (len(objfile.compunits()\[0\].symtabs) > 0)" \ "True" \ "Get compunit symtabs" gdb_test "python print (objfile.compunits()\[0\].symtabs)" \ "\\\[\\\]" \ "Compunit symtabs return a sequence of gdb.Symtab" # Test creation of compunits gdb_py_test_silent_cmd "python cu = gdb.Compunit(\"compunit1\", objfile, 200, 300)" \ "Create compunit1" 1 gdb_test "python print(cu)" \ "" \ "Print created compunit1" gdb_test "python print(cu in objfile.compunits())" \ "True" \ "Test compunit1 is in objfile.compunits()" gdb_test "python print(cu.global_block().start)" \ "0" \ "Test compunit1.global_block().start is 0" gdb_test "python print(cu.global_block().end)" \ "0" \ "Test compunit1.global_block().end is 0" gdb_test "python print(cu.static_block().start)" \ "0" \ "Test compunit1.static_block().start is 0" gdb_test "python print(cu.static_block().end)" \ "0" \ "Test compunit1.static_block().end is 0" gdb_py_test_silent_cmd "python cu2 = gdb.Compunit(\"dynamic2\", objfile, 400, 500, 24)" \ "Create compunit2 with capacity fo 24 blocks" 1 gdb_test "python cu3 = gdb.Compunit(\"dynamic3\", gdb, 600, 700)" \ "TypeError.*:.*" \ "Create compunit3 passing non-objfile" gdb_test "python cu4 = gdb.Compunit(\"dynamic4\", objfile, 900, 800)" \ "ValueError.*:.*" \ "Create compunit4 passing invalid global block range" gdb_test "python cu5 = gdb.Compunit(\"dynamic5\", objfile, 225, 325)" \ "ValueError.*:.*" \ "Create compunit4 passing overlapping global block range" gdb_unload "unload 1" gdb_test "python print (objfile.is_valid())" "False" \ "Get objfile validity after unload" gdb_test "python print (objfile.compunits())" "RuntimeError.*: Objfile no longer exists.*" \ "Get objfile compunits after unload" gdb_py_test_silent_cmd "python cu6 = gdb.Compunit(\"dynamic6\", objfile)" \ "Create compunit4 passing invalid objfile" 1