public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Mike Frysinger <vapier@gentoo.org>
To: Indu Bhagat <indu.bhagat@oracle.com>
Cc: binutils@sourceware.org
Subject: Re: [PATCH,V3 03/15] gas: generate .sframe from CFI directives
Date: Sun, 30 Oct 2022 13:48:33 +0545	[thread overview]
Message-ID: <Y14v1VCADGjFV6+6@vapier> (raw)
In-Reply-To: <20221030074450.1956074-4-indu.bhagat@oracle.com>

[-- Attachment #1: Type: text/plain, Size: 5041 bytes --]

On 30 Oct 2022 00:44, Indu Bhagat via Binutils wrote:
> --- a/gas/Makefile.am
> +++ b/gas/Makefile.am
> @@ -70,6 +70,8 @@ GAS_CFILES = \
>  	atof-generic.c \
>  	compress-debug.c \
>  	cond.c \
> +	sframe-opt.c \
> +	gen-sframe.c \
>  	depend.c \
>  	dwarf2dbg.c \
>  	dw2gencfi.c \
> @@ -105,6 +107,7 @@ HFILES = \
>  	bit_fix.h \
>  	cgen.h \
>  	compress-debug.h \
> +	gen-sframe.h \
>  	dwarf2dbg.h \
>  	dw2gencfi.h \
>  	ecoff.h \

i think both these variables are sorted, so you should keep that

> --- a/gas/as.h
> +++ b/gas/as.h
> @@ -261,7 +261,10 @@ enum _relax_state
>    rs_cfa,
>  
>    /* Cross-fragment dwarf2 line number optimization.  */
> -  rs_dwarf2dbg
> +  rs_dwarf2dbg,
> +
> +  /* SFrame FRE type selection optimization.  */
> +  rs_sframe

add a dangling comma ?

> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
>
> +offsetT
> +x86_sframe_cfa_ra_offset (void)
> +{
> +  gas_assert (x86_elf_abi == X86_64_ABI);
> +  return (offsetT)-8;

spaces around the -

> --- a/gas/dw2gencfi.c
> +++ b/gas/dw2gencfi.c
>  
> +  // FIXME - remove this commented line once the compiler can specify

can you link to an open bug in GCC bugzilla ?  or some other tracker ?

> +  // .sframe for .cfi_sections directive

period at the end of sentences.

> +  // if ((all_cfi_sections & CFI_EMIT_sframe) != 0)

i didn't think we used // C++ comments in C code, but stuck to /*...*/

> +  if (flag_gen_sframe || (all_cfi_sections & CFI_EMIT_sframe) != 0)
> +    {
> +#ifdef support_sframe_p
> +      if (support_sframe_p ())
> +	{
> +	  segT sframe_seg;
> +	  int alignment = ffs (DWARF2_ADDR_SIZE (stdoutput)) - 1;
> +
> +	  if (!SUPPORT_FRAME_LINKONCE)
> +	    sframe_seg = get_cfi_seg (NULL, ".sframe",
> +					 (SEC_ALLOC | SEC_LOAD | SEC_DATA
> +					  | DWARF2_EH_FRAME_READ_ONLY),
> +					 alignment);
> +	  output_sframe (sframe_seg);
> +	}
> +      else
> +	as_bad (_(".sframe not supported for target"));
> +
> +#else
> +	as_bad (_(".sframe not supported for target"));
> +#endif

rather than interleaving cpp checks in the middle of code (which are hard
to keep track of), put something at the top of the file (or a header) like:
#ifndef support_sframe_p
# define support_sframe_p() false
#endif

> --- a/gas/dw2gencfi.h
> +++ b/gas/dw2gencfi.h
> @@ -200,5 +200,6 @@ extern struct fde_entry *all_fde_data;
>  #define CFI_EMIT_debug_frame            (1 << 1)
>  #define CFI_EMIT_target                 (1 << 2)
>  #define CFI_EMIT_eh_frame_compact       (1 << 3)
> +#define CFI_EMIT_sframe              (1 << 4)

keep the defines aligned

> --- /dev/null
> +++ b/gas/gen-sframe.c
> 
> +/* gen-sframe.c - Support for generating SFrame section.
> +   Copyright (C) 2021 Free Software Foundation, Inc.

isn't this code new to 2022 ?

> +unsigned char
> +sframe_get_abi_arch_callback (const char *target_arch,
> +			      int big_endian_p)
> +{
> +  unsigned char sframe_abi_arch = 0;
> +
> +  if (strcmp (target_arch, "aarch64") == 0)
> +    {
> +      sframe_abi_arch = big_endian_p
> +	? SFRAME_ABI_AARCH64_ENDIAN_BIG
> +	: SFRAME_ABI_AARCH64_ENDIAN_LITTLE;
> +    }
> +  else if (strcmp (target_arch, "x86-64") == 0)
> +    {
> +      gas_assert (!big_endian_p);
> +      sframe_abi_arch = SFRAME_ABI_AMD64_ENDIAN_LITTLE;

shouldn't this be in config/tc-* headers ?

> +      /* Other abi/arch are not supported.  Should be unreachable.  */
> +      printf (_("SFrame Unsupported abi or arch\n"));
> +      abort ();

as_fatal would be better than calling abort.  comes up multiple times.

> +static void
> +sframe_xlate_ctx_cleanup (struct sframe_xlate_ctx *xlate_ctx)
> +{
> +  struct sframe_row_entry *fre, *fre_next;
> +
> +  if (xlate_ctx->num_xlate_fres)
> +  {
> +    fre = xlate_ctx->first_fre;
> +    while (fre)
> +    {

bad GNU style -- braces indent one more level

> +static int
> +sframe_xlate_do_def_cfa_offset (struct sframe_xlate_ctx *xlate_ctx,
> +				struct cfi_insn_data *cfi_insn)
> +{
> +  /* The scratchpad FRE currently being updated with each cfi_insn
> +     being interpreted.  This FRE eventually gets linked in into the
> +     list of FREs for the specific function.  */
> +  struct sframe_row_entry *cur_fre = xlate_ctx->cur_fre;
> +
> +  gas_assert (cur_fre);
> +  /*  Define the current CFA rule to use the provided offset (but to keep
> +      the old register).  However, if the old register is not FP/SP,
> +      skip creating SFrame unwind info for the function. */
> +  if ((cur_fre->cfa_base_reg == SFRAME_CFA_FP_REG)
> +      || (cur_fre->cfa_base_reg == SFRAME_CFA_SP_REG))
> +    {
> +      sframe_fre_set_cfa_offset (cur_fre, cfi_insn->u.i);
> +      cur_fre->merge_candidate = false;
> +    }
> +  else
> +    return -1;
> +
> +  return 0;
> +}

is this returning a boolean ?  use an actual bool type w/true+false instead
of 0/1/-1 integer values.  this comes up multiple times in this file.
-mike

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2022-10-30  9:17 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-30  7:44 [PATCH,V3 00/15] Definition and support for SFrame unwind format Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 01/15] sframe.h: Add SFrame format definition Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 02/15] gas: add new command line option --gsframe Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 03/15] gas: generate .sframe from CFI directives Indu Bhagat
2022-10-30  8:03   ` Mike Frysinger [this message]
2022-11-06  5:30     ` Indu Bhagat
2022-11-06  5:36     ` [PATCH,V3.1 " Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 04/15] gas: testsuite: add new tests for SFrame unwind info Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 05/15] libsframe: add the SFrame library Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 06/15] bfd: linker: merge .sframe sections Indu Bhagat
2022-10-30 13:33   ` Mike Frysinger
2022-10-30  7:44 ` [PATCH,V3 07/15] readelf/objdump: support for SFrame section Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 08/15] unwinder: generate backtrace using SFrame format Indu Bhagat
2022-10-30 14:03   ` Mike Frysinger
2022-11-01 22:36     ` [PATCH, V3 " Weimin Pan
2022-11-02 15:00       ` Mike Frysinger
2022-11-02  6:23     ` [PATCH,V3 " Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 09/15] unwinder: Add SFrame unwinder tests Indu Bhagat
2022-10-30 14:14   ` Mike Frysinger
2022-10-30  7:44 ` [PATCH,V3 10/15] gdb: sim: buildsystem changes to accommodate libsframe Indu Bhagat
2022-10-30 14:15   ` [PATCH, V3 " Mike Frysinger
2022-10-31 20:39     ` Indu Bhagat
2022-11-02 15:02       ` Mike Frysinger
2022-11-02 19:11         ` Jose E. Marchesi
2022-11-03 15:27           ` Mike Frysinger
2022-11-04 12:14             ` Jose E. Marchesi
2022-10-30  7:44 ` [PATCH,V3 11/15] libctf: add libsframe to LDFLAGS and LIBS Indu Bhagat
2022-10-30 13:27   ` Mike Frysinger
2022-10-31 20:06     ` Indu Bhagat
2022-11-01 18:57       ` Nick Alcock
2022-11-01 21:42         ` Andreas Schwab
2022-11-02 13:16           ` Nick Alcock
2022-11-04 19:02             ` [PATCH,V3.1,11/15] " Indu Bhagat
2022-11-04 21:01             ` [PATCH,V3.2,11/15] " Indu Bhagat
2022-11-05  9:21               ` Andreas Schwab
2022-11-07 22:28                 ` [PATCH,V3.3 11/15] " Indu Bhagat
2022-11-08  3:26                   ` Mike Frysinger
2022-11-08 19:26                     ` Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 12/15] src-release.sh: Add libsframe Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 13/15] binutils/NEWS: add text for SFrame support Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 14/15] gas/NEWS: add text about new command line option and " Indu Bhagat
2022-10-30  8:05   ` [PATCH, V3 " Mike Frysinger
2022-10-31 23:17     ` Indu Bhagat
2022-10-30  7:44 ` [PATCH,V3 15/15] doc: add SFrame spec file 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=Y14v1VCADGjFV6+6@vapier \
    --to=vapier@gentoo.org \
    --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).