public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Jan Beulich <jbeulich@suse.com>
To: Indu Bhagat <indu.bhagat@oracle.com>
Cc: binutils@sourceware.org
Subject: Re: [PATCH, V2 06/10] gas: scfidw2gen: new functionality to prepapre for SCFI
Date: Tue, 31 Oct 2023 12:28:51 +0100	[thread overview]
Message-ID: <ee060731-68b3-494b-01dc-49431fbed2dd@suse.com> (raw)
In-Reply-To: <20231030165137.2570939-7-indu.bhagat@oracle.com>

On 30.10.2023 17:51, Indu Bhagat wrote:
> --- /dev/null
> +++ b/gas/scfidw2gen.c
> @@ -0,0 +1,305 @@
> +/* scfidw2gen.c - Support for emission of synthesized Dwarf2 CFI.
> +   Copyright (C) 2003-2023 Free Software Foundation, Inc.

Is this year range really applicable to this new file?

> +   This file is part of GAS, the GNU Assembler.
> +
> +   GAS 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, or (at your option)
> +   any later version.
> +
> +   GAS 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 GAS; see the file COPYING.  If not, write to the Free
> +   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
> +   02110-1301, USA.  */
> +
> +#include "as.h"
> +#include "dw2gencfi.h"
> +#include "subsegs.h"
> +#include "scfidw2gen.h"
> +
> +#if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN)
> +
> +static int scfi_ignore_warn_once = 0;

Nit: bool please (and no real need for an initializer).

> +static void dot_scfi_sections (int);
> +static void dot_scfi_ignore (int);
> +static void dot_scfi (int);

May I suggest to avoid such forward declarations by moving ...

> +const pseudo_typeS scfi_pseudo_table[] =

... this table towards the bottom of the file?

> +  {
> +    { "cfi_sections", dot_scfi_sections, 0 }, /* No ignore.  */

Instead of three such individual comments, how about putting the three
relevant ones first, followed by a comment (serving as a separator) and
then all dot_scfi_ignore entries?

> +    { "cfi_startproc", dot_scfi_ignore, 0 },
> +    { "cfi_endproc", dot_scfi_ignore, 0 },
> +    { "cfi_fde_data", dot_scfi_ignore, 0 },
> +    { "cfi_def_cfa", dot_scfi_ignore, 0 },
> +    { "cfi_def_cfa_register", dot_scfi_ignore, 0 },
> +    { "cfi_def_cfa_offset", dot_scfi_ignore, 0 },
> +    { "cfi_adjust_cfa_offset", dot_scfi_ignore, 0 },
> +    { "cfi_offset", dot_scfi_ignore, 0 },
> +    { "cfi_rel_offset", dot_scfi_ignore, 0 },
> +    { "cfi_register", dot_scfi_ignore, 0 },
> +    { "cfi_return_column", dot_scfi_ignore, 0 },
> +    { "cfi_restore", dot_scfi_ignore, 0 },
> +    { "cfi_undefined", dot_scfi_ignore, 0 },
> +    { "cfi_same_value", dot_scfi_ignore, 0 },
> +    { "cfi_remember_state", dot_scfi_ignore, 0 },
> +    { "cfi_restore_state", dot_scfi_ignore, 0 },
> +    { "cfi_window_save", dot_scfi_ignore, 0 },
> +    { "cfi_negate_ra_state", dot_scfi_ignore, 0 },
> +    { "cfi_escape", dot_scfi_ignore, 0 },
> +    { "cfi_signal_frame", dot_scfi, CFI_signal_frame }, /* No ignore.  */
> +    { "cfi_personality", dot_scfi_ignore, 0 },
> +    { "cfi_personality_id", dot_scfi_ignore, 0 },
> +    { "cfi_lsda", dot_scfi_ignore, 0 },
> +    { "cfi_val_encoded_addr", dot_scfi_ignore, 0 },
> +    { "cfi_inline_lsda", dot_scfi_ignore, 0 },
> +    { "cfi_label", dot_scfi, CFI_label }, /* No ignore.  */
> +    { "cfi_val_offset", dot_scfi_ignore, 0 },
> +    { NULL, NULL, 0 }
> +  };
> +
> +static void
> +dot_scfi_ignore (int ignored ATTRIBUTE_UNUSED)
> +{
> +  gas_assert (flag_synth_cfi);
> +
> +  if (scfi_ignore_warn_once == 0)
> +    {
> +      as_warn (_("--scfi=all ignores some user-specified CFI directives"));

s/some/most/ ?

> +void
> +scfi_dot_cfi_startproc (symbolS *start_sym)

This and the following two functions presently have no caller, and I
also can't spot equivalents in dw2gencfi.c. How are they (going) to be
used? This ...

> +{
> +  if (frchain_now->frch_cfi_data != NULL)
> +    {
> +      as_bad (_("previous CFI entry not closed (missing .cfi_endproc)"));

... for example suggests that the function here might really be the
handler for .cfi_startproc, yet the table above says .cfi_startproc is
ignored.

> +#else
> +
> +static void
> +dot_scfi_dummy (int ignored ATTRIBUTE_UNUSED)
> +{
> +  as_bad (_("SCFI is not supported for this target"));
> +  ignore_rest_of_line ();
> +}
> +
> +const pseudo_typeS scfi_pseudo_table[] =
> +  {
> +    { "cfi_sections", dot_scfi_dummy, 0 },
> +    { "cfi_startproc", dot_scfi_dummy, 0 },
> +    { "cfi_endproc", dot_scfi_dummy, 0 },
> +    { "cfi_fde_data", dot_scfi_dummy, 0 },
> +    { "cfi_def_cfa", dot_scfi_dummy, 0 },
> +    { "cfi_def_cfa_register", dot_scfi_dummy, 0 },
> +    { "cfi_def_cfa_offset", dot_scfi_dummy, 0 },
> +    { "cfi_adjust_cfa_offset", dot_scfi_dummy, 0 },
> +    { "cfi_offset", dot_scfi_dummy, 0 },
> +    { "cfi_rel_offset", dot_scfi_dummy, 0 },
> +    { "cfi_register", dot_scfi_dummy, 0 },
> +    { "cfi_return_column", dot_scfi_dummy, 0 },
> +    { "cfi_restore", dot_scfi_dummy, 0 },
> +    { "cfi_undefined", dot_scfi_dummy, 0 },
> +    { "cfi_same_value", dot_scfi_dummy, 0 },
> +    { "cfi_remember_state", dot_scfi_dummy, 0 },
> +    { "cfi_restore_state", dot_scfi_dummy, 0 },
> +    { "cfi_window_save", dot_scfi_dummy, 0 },
> +    { "cfi_negate_ra_state", dot_scfi_dummy, 0 },
> +    { "cfi_escape", dot_scfi_dummy, 0 },
> +    { "cfi_signal_frame", dot_scfi_dummy, 0 },
> +    { "cfi_personality", dot_scfi_dummy, 0 },
> +    { "cfi_personality_id", dot_scfi_dummy, 0 },
> +    { "cfi_lsda", dot_scfi_dummy, 0 },
> +    { "cfi_val_encoded_addr", dot_scfi_dummy, 0 },
> +    { "cfi_inline_lsda", dot_scfi_dummy, 0 },
> +    { "cfi_label", dot_scfi_dummy, 0 },
> +    { "cfi_val_offset", dot_scfi_dummy, 0 },
> +    { NULL, NULL, 0 }
> +  };
> +
> +#endif

Is this really needed? Can't you simply error on use of the command
line option, without the need for the extra table and dummy handler?

> --- /dev/null
> +++ b/gas/scfidw2gen.h
> @@ -0,0 +1,37 @@
> +/* scfidw2gen.h - Support for emitting synthesized Dwarf2 CFI.
> +   Copyright (C) 2003-2023 Free Software Foundation, Inc.
> +
> +   This file is part of GAS, the GNU Assembler.
> +
> +   GAS 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, or (at your option)
> +   any later version.
> +
> +   GAS 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 GAS; see the file COPYING.  If not, write to the Free
> +   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
> +   02110-1301, USA.  */
> +
> +#ifndef SCFIDW2GEN_H
> +#define SCFIDW2GEN_H
> +
> +#include "as.h"
> +#include "dwarf2.h"
> +
> +extern int all_cfi_sections;

This needs to go into dw2gencfi.h, such that dw2gencfi.c will also see
the declaration (and the compiler be able to check that declaration and
definition are in sync).

Jan

  reply	other threads:[~2023-10-31 11:28 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-30 16:51 [PATCH, V2 00/10] Synthesize CFI for hand-written asm Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 01/10] gas: dw2gencfi: minor rejig for cfi_sections_set and all_cfi_sections Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 02/10] gas: dw2gencfi: use all_cfi_sections instead of cfi_sections Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 03/10] gas: dw2gencfi: expose a new cfi_set_last_fde API Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 04/10] gas: dw2gencfi: move some tc_* defines to the header file Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 05/10] gas: add new command line option --scfi[=all,none] Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 06/10] gas: scfidw2gen: new functionality to prepapre for SCFI Indu Bhagat
2023-10-31 11:28   ` Jan Beulich [this message]
2023-10-31 22:06     ` Indu Bhagat
2023-11-02 10:35       ` Jan Beulich
2023-11-02 16:32         ` Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 07/10] gas: synthesize CFI for hand-written asm Indu Bhagat
2023-10-31 14:10   ` Jan Beulich
2023-11-02  8:15     ` Indu Bhagat
2023-11-02 11:39       ` Jan Beulich
2023-12-10 10:22         ` Indu Bhagat
2023-12-11  7:59           ` Jan Beulich
2023-12-19  7:07             ` Indu Bhagat
2023-11-02 15:53   ` Jan Beulich
2023-11-04  7:29     ` Indu Bhagat
2023-11-06 11:03       ` Jan Beulich
2023-12-10 10:23         ` Indu Bhagat
2023-12-11  8:02           ` Jan Beulich
2023-10-30 16:51 ` [PATCH, V2 08/10] gas: doc: update documentation for the new listing option Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 09/10] gas: testsuite: add a x86_64 testsuite for SCFI Indu Bhagat
2023-10-31 16:13   ` Jan Beulich
2023-11-01  6:24     ` Indu Bhagat
2023-11-02 12:28       ` Jan Beulich
2023-11-03  5:45         ` Indu Bhagat
2023-10-30 16:51 ` [PATCH, V2 10/10] gas/NEWS: announce the new command line option Indu Bhagat

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ee060731-68b3-494b-01dc-49431fbed2dd@suse.com \
    --to=jbeulich@suse.com \
    --cc=binutils@sourceware.org \
    --cc=indu.bhagat@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).