From patchwork Tue Mar 28 18:49:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Maciej W. Rozycki" X-Patchwork-Id: 67047 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3761C3858D39 for ; Tue, 28 Mar 2023 18:49:22 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by sourceware.org (Postfix) with ESMTPS id 7AEC33858D39 for ; Tue, 28 Mar 2023 18:49:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7AEC33858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-ed1-x533.google.com with SMTP id cn12so53706046edb.4 for ; Tue, 28 Mar 2023 11:49:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1680029344; h=mime-version:user-agent:references:message-id:in-reply-to:subject :cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=LV5Tfw3OPBF02vmGFyCYjwz1pxGo+akho0afyJCa6aI=; b=DIF6TPfff0j2YNl0wVFBc55mGU8fOG/rnYM0hbp/SYTbW8HfJiahNwHhYOktZlIgiO qyQ7m0f8JOkhU5hxc59qxLtiRnmSLoUB2jTq5V+K09Uce3Bu74kkgIi9nPR7AlGkMXza RoHwOvS8wULmcitIzy5lrUf/QDd1gUw3fNLeq0eCcQ+WF4C6C8ClPcPkzYdJTGK3Ut5Q tqSI2wSr4Qy21APx3XvazhhLC8VIvq0qbU6+ZiAhzyKbaY2N4RY12QRFknnsUyT5jopP tOvP/ziN32CJxzkPy5FVoJiFCEagvFrSnh3FalZenDadmIfsETGAgIaDa21QuqKMWy9F ud+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680029344; h=mime-version:user-agent:references:message-id:in-reply-to:subject :cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=LV5Tfw3OPBF02vmGFyCYjwz1pxGo+akho0afyJCa6aI=; b=XvsqYi2qSi9PhI44wqnwrB8TMmZGEOHo6QKu2Fke/TGhRwebeO429IUv/ZeFPkcTmG y0MvZQI0jzjWS4eO7CwnAh24dirlnAEGSJNbaCPZ9nz6iBOxPO/iJR7MtS2aoyzuWTD0 QtkYEGbSzPPoXYSwCdEGQdUzt6JN0cXn49/0YyIeydw5vXIYC8m6wSDkMxi7D3AsfB5U rSOFnwZrjd+ma5RGYTgHLwOolCz9TWO1XFZ08/OtaXhJifVbfrFtR8y79TJAycEk8Jv+ Bp9Lew40586V+1lGIoOpiE75fHsSOe6jkry4n+irjeUQtJvQbKjHFpevih7A0sl9eASu JUZg== X-Gm-Message-State: AAQBX9euaXQQiJEz+Axsdv13hgjcT6XUWJKeM2+Y4V32b73j2jCR5axI StnVt7yMyjZ0wMTFVuvAZhjUyFlfieyxSv94Lnk= X-Google-Smtp-Source: AKy350b8bcNAwZQf3j71mGa8+8lTKyiJXt5AplpKLFKvLrgHVDSlMMC8WrW3A+1RDpMR8hPyRBHf4g== X-Received: by 2002:a17:906:cd19:b0:929:e782:d98e with SMTP id oz25-20020a170906cd1900b00929e782d98emr16715395ejb.17.1680029344085; Tue, 28 Mar 2023 11:49:04 -0700 (PDT) Received: from annie.orcam.me.uk (annie.orcam.me.uk. [2001:4190:8020::48]) by smtp.gmail.com with ESMTPSA id v2-20020a1709064e8200b008d9ddd2da88sm15544127eju.6.2023.03.28.11.49.03 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Mar 2023 11:49:03 -0700 (PDT) Date: Tue, 28 Mar 2023 19:49:02 +0100 (BST) From: "Maciej W. Rozycki" To: gdb-patches@sourceware.org cc: Richard Bunt Subject: [PATCH v2 3/3] GDB: Add `info main' command In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_ASCII_DIVIDERS, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" From: Richard Bunt 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 Reviewed-By: Eli Zaretskii --- Changes from v1: - Add documentation pieces. --- gdb/NEWS | 3 ++ gdb/doc/gdb.texinfo | 6 ++++ gdb/symtab.c | 11 ++++++++ gdb/testsuite/gdb.fortran/info-main.exp | 42 ++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.fortran/info-main.f90 | 19 ++++++++++++++ 5 files changed, 81 insertions(+) gdb-richard-info-main-command.diff Index: src/gdb/NEWS =================================================================== --- src.orig/gdb/NEWS +++ src/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: Index: src/gdb/doc/gdb.texinfo =================================================================== --- src.orig/gdb/doc/gdb.texinfo +++ src/gdb/doc/gdb.texinfo @@ -20162,6 +20162,12 @@ The optional flag @samp{-q}, which stand 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 Index: src/gdb/symtab.c =================================================================== --- src.orig/gdb/symtab.c +++ src/gdb/symtab.c @@ -5282,6 +5282,14 @@ info_modules_command (const char *args, 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); Index: src/gdb/testsuite/gdb.fortran/info-main.exp =================================================================== --- /dev/null +++ src/gdb/testsuite/gdb.fortran/info-main.exp @@ -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 . + +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 Index: src/gdb/testsuite/gdb.fortran/info-main.f90 =================================================================== --- /dev/null +++ src/gdb/testsuite/gdb.fortran/info-main.f90 @@ -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 . + +program simple + implicit none + print *, "Nothing." +end program simple