GDB: Add `info main' command
Allow consumers of GDB to extract the name of the main method. This is most useful for Fortran programs which have a variable main method. Used by both MAP and DDT e.g. it is used to detect the presence of debug information. Co-Authored-By: Maciej W. Rozycki <macro@embecosm.com>
This commit is contained in:
parent
5b2007ad26
commit
03d83cd5f5
3
gdb/NEWS
3
gdb/NEWS
@ -83,6 +83,9 @@ show always-read-ctf
|
||||
When off, CTF is only read if DWARF is not present. When on, CTF is
|
||||
read regardless of whether DWARF is present. Off by default.
|
||||
|
||||
info main
|
||||
Get main symbol to identify entry point into program.
|
||||
|
||||
* New convenience function "$_shell", to execute a shell command and
|
||||
return the result. This lets you run shell commands in expressions.
|
||||
Some examples:
|
||||
|
@ -20162,6 +20162,12 @@ The optional flag @samp{-q}, which stands for @samp{quiet}, disables
|
||||
printing header information and messages explaining why no functions
|
||||
or variables have been printed.
|
||||
|
||||
@kindex info main
|
||||
@item info main
|
||||
Print the name of the starting function of the program. This serves
|
||||
primarily Fortran programs, which have a user-supplied name for the
|
||||
main subroutine.
|
||||
|
||||
@kindex info classes
|
||||
@cindex Objective-C, classes and selectors
|
||||
@item info classes
|
||||
|
11
gdb/symtab.c
11
gdb/symtab.c
@ -5282,6 +5282,14 @@ info_modules_command (const char *args, int from_tty)
|
||||
from_tty);
|
||||
}
|
||||
|
||||
/* Implement the 'info main' command. */
|
||||
|
||||
static void
|
||||
info_main_command (const char *args, int from_tty)
|
||||
{
|
||||
gdb_printf ("%s\n", main_name ());
|
||||
}
|
||||
|
||||
static void
|
||||
rbreak_command (const char *regexp, int from_tty)
|
||||
{
|
||||
@ -6873,6 +6881,9 @@ Options:\n\
|
||||
_("All module names, or those matching REGEXP."));
|
||||
set_cmd_completer_handle_brkchars (c, info_types_command_completer);
|
||||
|
||||
add_info ("main", info_main_command,
|
||||
_("Get main symbol to identify entry point into program."));
|
||||
|
||||
add_basic_prefix_cmd ("module", class_info, _("\
|
||||
Print information about modules."),
|
||||
&info_module_cmdlist, 0, &infolist);
|
||||
|
42
gdb/testsuite/gdb.fortran/info-main.exp
Normal file
42
gdb/testsuite/gdb.fortran/info-main.exp
Normal file
@ -0,0 +1,42 @@
|
||||
# Copyright 2023 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/>.
|
||||
|
||||
require allow_fortran_tests
|
||||
|
||||
load_lib fortran.exp
|
||||
|
||||
standard_testfile .f90
|
||||
|
||||
set old_gdbflags $GDBFLAGS
|
||||
set GDBFLAGS [string map {"-readnow" ""} "$GDBFLAGS"]
|
||||
|
||||
if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f90}]} {
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test "info main" "simple" "info main prior to start"
|
||||
|
||||
if ![fortran_runto_main] {
|
||||
untested "could not run to main"
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test "info main" "simple" "info main post start"
|
||||
|
||||
set GDBFLAGS "$GDBFLAGS -readnow"
|
||||
clean_restart $testfile
|
||||
gdb_test "info main" "simple" "info main with readnow"
|
||||
|
||||
set GDBFLAGS $old_gdbflags
|
19
gdb/testsuite/gdb.fortran/info-main.f90
Normal file
19
gdb/testsuite/gdb.fortran/info-main.f90
Normal file
@ -0,0 +1,19 @@
|
||||
! Copyright 2023 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/>.
|
||||
|
||||
program simple
|
||||
implicit none
|
||||
print *, "Nothing."
|
||||
end program simple
|
Loading…
x
Reference in New Issue
Block a user