forked from Imagelibrary/binutils-gdb
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:
committed by
Maciej W. Rozycki
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
|
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.
|
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
|
* New convenience function "$_shell", to execute a shell command and
|
||||||
return the result. This lets you run shell commands in expressions.
|
return the result. This lets you run shell commands in expressions.
|
||||||
Some examples:
|
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
|
printing header information and messages explaining why no functions
|
||||||
or variables have been printed.
|
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
|
@kindex info classes
|
||||||
@cindex Objective-C, classes and selectors
|
@cindex Objective-C, classes and selectors
|
||||||
@item info classes
|
@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);
|
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
|
static void
|
||||||
rbreak_command (const char *regexp, int from_tty)
|
rbreak_command (const char *regexp, int from_tty)
|
||||||
{
|
{
|
||||||
@@ -6873,6 +6881,9 @@ Options:\n\
|
|||||||
_("All module names, or those matching REGEXP."));
|
_("All module names, or those matching REGEXP."));
|
||||||
set_cmd_completer_handle_brkchars (c, info_types_command_completer);
|
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, _("\
|
add_basic_prefix_cmd ("module", class_info, _("\
|
||||||
Print information about modules."),
|
Print information about modules."),
|
||||||
&info_module_cmdlist, 0, &infolist);
|
&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
|
||||||
Reference in New Issue
Block a user