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,V4 13/14] gas: testsuite: add a x86_64 testsuite for SCFI
Date: Fri, 5 Jan 2024 15:22:44 +0100	[thread overview]
Message-ID: <1c9e7d28-1bef-4d1d-9b51-b1725c8b2f07@suse.com> (raw)
In-Reply-To: <20240103071526.3846985-14-indu.bhagat@oracle.com>

On 03.01.2024 08:15, Indu Bhagat wrote:
> [Changes from V3 to V4]
>   - Forward and backward pass failure is an error (was warning in V2).
>     Fix the tests.
>   - Add new test ginsn-add-1.
>   - Add new test scfi-unsupported-insn-1 which includes the new APX
>     instructions (pop2, push2).
> [End of changes from V3 to V4]
> 
> [Changes from V2 to V3]
>   - Fix inconsistent indentation across tests.
>   - Fixed some issues in scfi-x86.exp: add scfi-callee-saved-1 to the
>     list (was missing earlier), removed redundant test scfi-ignore-1
>   - Adjsuted tests for some rewording in the warning messages.
>   - Use register names instead of numbers in some CFI directives.
>   - Run each test with and without --scfi.  This will keep the CFI
>     annotations tested.

With this, ...

>   - Run scfi-unsupported-1 with --x32 as well.
>   - Added more tests:
>     + ginsn-dw2-regnum-1
>     + ginsn-pop-1
>     + ginsn-push-1
>     + scfi-enter-1
>     + scfi-cfi-sections-1, etc.
> [End of changes from V2 to V3]
> 
> The testsuite for SCFI contains target-specific tests.
> 
> As all the tests are executed with --scfi command line option, the CFI
> annotations in the test .s files are skipped altogether by the GAS for
> processing.  The CFI directives in the assembly files are added with the
> intention to aid maintainence only: CFI annotations in .s files help
> convey the expected EH Frame / SFrame data in a format-oblivious way.

... wouldn't this better have been re-worded?

> Some testcases are used to highlight those asm constructs that the SCFI
> machinery in GAS currently does not support:
> 
>   - Only AMD64 ABI is supported for now. Using --m32 with --scfi results
>     in hard error.
>     See scfi-unsupported-1.s.

DYM --32 here? And did you also want to mention --x32?

>   - Untraceable stack-pointer manipulation in function epilougue and prologue.
>     See scfi-unsupported-2.s.
> 
>   - Using Dynamically Realigned Arguement Pointer (DRAP) register to
>     realign the stack.  For SCFI, the CFA must be only REG_SP or REG_FP
>     based.  See scfi-unsupported-drap-1.s
> 
> Some testcases are used to highlight some diagnostics that the SCFI
> machinery in GAS currently issues, with an intent to help user correct
> inadvertent errors in their hand-written asm.  An error is issued in a
> situation where GAS is not sure it will be able to synthesize valid CFI.
> 
>   - (#1) "Warning: SCFI: Asymetrical register restore"
>   - (#2) "Error: SCFI: usage of REG_FP as scratch not supported"
>   - (#3) "Error: SCFI: unsupported stack manipulation pattern"

When "not sure", I think it should be warnings. The bulleted list looks
to match that, but the earlier text doesn't.

> --- /dev/null
> +++ b/gas/testsuite/gas/scfi/README
> @@ -0,0 +1,17 @@
> +Notes on the SCFI testsuite in GAS:
> +
> +* At this time, SCFI machinery is only supported for x86_64.
> +
> +* When adding more tests, please keep CFI annotations updated in the .s files.
> +  Recall that user-specified, synthesizable CFI annotations are ignored by the
> +  GAS when --scfi (=all) is in effect.  Adding CFI annocations, irrespectively,
> +  makes the testcases clearer in terms of understanding the expected unwind
> +  data.

As per above, this may also want re-wording.

> --- /dev/null
> +++ b/gas/testsuite/gas/scfi/x86_64/ginsn-add-1.s
> @@ -0,0 +1,26 @@
> +## Testcase with a variety of add.
> +## Some add insns valid in 64-bit mode may not be processed for SCFI.
> +	.text
> +	.globl	foo
> +	.type	foo, @function
> +foo:
> +	push	%rsp
> +	movq	%rsp, %rbp
> +
> +	addq	%rax, symbol
> +        add     symbol, %eax
> +
> +        add	(%eax), %esp
> +        add	%esp, (,%eax)
> +
> +        addq	%rax, %rbx
> +	add	%eax, %ebx
> +
> +        addq    $1, -16(%rbp)
> +
> +        add	(,%eax), %esp
> +        add	%esp, (,%eax)
> +
> +	ret
> +.LFE0:
> +	.size	foo, .-foo

In the revision log you say you sorted inconsistent indentation, but
here you clearly didn't.

> --- /dev/null
> +++ b/gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp
> @@ -0,0 +1,113 @@
> +# Copyright (C) 2022-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, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
> +
> +if { ![is_elf_format] } then {
> +    return
> +}
> +
> +# common tests
> +if  { ([istarget "x86_64-*-*"]) } then {
> +
> +    global ASFLAGS
> +    set old_ASFLAGS "$ASFLAGS"
> +
> +    run_list_test "ginsn-dw2-regnum-1" "--scfi -ali"
> +    run_list_test "ginsn-add-1" "--scfi -ali"
> +    run_list_test "ginsn-pop-1" "--scfi -ali"
> +    run_list_test "ginsn-push-1" "--scfi -ali"
> +
> +    run_dump_test "scfi-cfi-label-1"
> +    run_list_test "scfi-cfi-label-1" "--scfi --warn"

Starting here, where is it that you also check CFI generated from
the directives? Also, why does each source need assembling twice?
Can't you check for the diagnostics right in the "dump" tests?

Jan

> +    run_dump_test "scfi-cfi-sections-1"
> +    run_list_test "scfi-cfi-sections-1" "--scfi --warn"
> +
> +    run_list_test "scfi-diag-1" "--scfi"
> +    run_list_test "scfi-fp-diag-2" "--scfi"
> +    run_list_test "scfi-diag-2" "--scfi"
> +
> +    run_list_test "scfi-unsupported-1" "--32 --scfi"
> +    run_list_test "scfi-unsupported-1" "--x32 --scfi"
> +    run_list_test "scfi-unsupported-insn-1" "--scfi"
> +    run_list_test "scfi-unsupported-2" "--scfi"
> +    run_list_test "scfi-unsupported-3" "--scfi"
> +    run_list_test "scfi-unsupported-4" "--scfi"
> +    run_list_test "scfi-unsupported-drap-1" "--scfi"
> +    run_list_test "scfi-unsupported-cfg-1" "--scfi"
> +    run_list_test "scfi-unsupported-cfg-2" "--scfi"
> +
> +    run_dump_test "scfi-add-1"
> +    run_list_test "scfi-add-1" "--scfi --warn"
> +    run_dump_test "scfi-add-2"
> +    run_list_test "scfi-add-2" "--scfi --warn"
> +    run_dump_test "scfi-cfg-1"
> +    run_list_test "scfi-cfg-1" "--scfi --warn"
> +    run_dump_test "scfi-cfg-2"
> +    run_list_test "scfi-cfg-2" "--scfi --warn"
> +    run_dump_test "scfi-asm-marker-1"
> +    run_list_test "scfi-asm-marker-1" "--scfi --warn"
> +    run_dump_test "scfi-asm-marker-2"
> +    run_list_test "scfi-asm-marker-2" "--scfi --warn"
> +    run_dump_test "scfi-asm-marker-3"
> +    run_list_test "scfi-asm-marker-3" "--scfi --warn"
> +    run_dump_test "scfi-pushsection-1"
> +    run_list_test "scfi-pushsection-1" "--scfi --warn"
> +    run_dump_test "scfi-pushsection-2"
> +    run_list_test "scfi-pushsection-2" "--scfi --warn"
> +
> +    run_dump_test "scfi-cofi-1"
> +    run_list_test "scfi-cofi-1" "--scfi --warn"
> +    run_dump_test "scfi-sub-1"
> +    run_list_test "scfi-sub-1" "--scfi --warn"
> +    run_dump_test "scfi-sub-2"
> +    run_list_test "scfi-sub-2" "--scfi --warn"
> +    run_dump_test "scfi-simple-1"
> +    run_list_test "scfi-simple-1" "--scfi --warn"
> +    run_dump_test "scfi-simple-2"
> +    run_list_test "scfi-simple-2" "--scfi --warn"
> +    run_dump_test "scfi-pushq-1"
> +    run_list_test "scfi-pushq-1" "--scfi --warn"
> +    run_dump_test "scfi-lea-1"
> +    run_list_test "scfi-lea-1" "--scfi --warn"
> +    run_dump_test "scfi-enter-1"
> +    run_list_test "scfi-enter-1" "--scfi --warn"
> +    run_dump_test "scfi-leave-1"
> +    run_list_test "scfi-leave-1" "--scfi --warn"
> +    run_dump_test "scfi-bp-sp-1"
> +    run_list_test "scfi-bp-sp-1" "--scfi --warn"
> +    run_dump_test "scfi-bp-sp-2"
> +    run_list_test "scfi-bp-sp-2" "--scfi --warn"
> +    run_dump_test "scfi-callee-saved-1"
> +    run_list_test "scfi-callee-saved-1" "--scfi --warn"
> +    run_dump_test "scfi-callee-saved-2"
> +    run_list_test "scfi-callee-saved-2" "--scfi --warn"
> +    run_dump_test "scfi-callee-saved-3"
> +    run_list_test "scfi-callee-saved-3" "--scfi --warn"
> +    run_dump_test "scfi-callee-saved-4"
> +    run_list_test "scfi-callee-saved-4" "--scfi --warn"
> +    run_dump_test "scfi-dyn-stack-1"
> +    run_list_test "scfi-dyn-stack-1" "--scfi --warn"
> +    run_dump_test "scfi-indirect-mov-1"
> +    run_list_test "scfi-indirect-mov-1" "--scfi --warn"
> +    run_dump_test "scfi-indirect-mov-2"
> +    run_list_test "scfi-indirect-mov-2" "--scfi --warn"
> +    run_dump_test "scfi-indirect-mov-3"
> +    run_list_test "scfi-indirect-mov-3" "--scfi --warn"
> +    run_dump_test "scfi-indirect-mov-4"
> +    run_list_test "scfi-indirect-mov-4" "--scfi --warn"
> +    run_dump_test "scfi-selfalign-func-1"
> +    run_list_test "scfi-selfalign-func-1" "--scfi --warn"
> +}
> +


  reply	other threads:[~2024-01-05 14:22 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-03  7:15 [PATCH,V4 00/14] Synthesize CFI for hand-written asm Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 01/14] gas: dw2gencfi: minor rejig for cfi_sections_set and all_cfi_sections Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 02/14] gas: dw2gencfi: use all_cfi_sections instead of cfi_sections Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 03/14] gas: dw2gencfi: expose a new cfi_set_last_fde API Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 04/14] gas: dw2gencfi: move some tc_* defines to the header file Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 05/14] gas: dw2gencfi: expose dot_cfi_sections for scfidw2gen Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 06/14] gas: dw2gencfi: externalize the all_cfi_sections Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 07/14] gas: add new command line option --scfi[=all,none] Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 08/14] gas: scfidw2gen: new functionality to prepare for SCFI Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 09/14] opcodes: i386: new marker for insns that implicitly update stack pointer Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 10/14] gas: synthesize CFI for hand-written asm Indu Bhagat
2024-01-05 13:58   ` Jan Beulich
2024-01-08  0:46     ` Indu Bhagat
2024-01-08  8:16       ` Jan Beulich
2024-01-08  8:33         ` Indu Bhagat
2024-01-08 19:33     ` Indu Bhagat
2024-01-09  9:30       ` Jan Beulich
2024-01-10  6:10         ` Indu Bhagat
2024-01-10  9:44           ` Jan Beulich
2024-01-10 11:26             ` Indu Bhagat
2024-01-10 14:15               ` Jan Beulich
2024-01-10 19:43                 ` Indu Bhagat
2024-01-11  8:13                   ` Jan Beulich
2024-01-11 18:14                     ` Indu Bhagat
2024-01-17  1:20             ` Indu Bhagat
2024-01-17  8:09               ` Jan Beulich
2024-01-03  7:15 ` [PATCH,V4 11/14] gas: doc: update documentation for the new listing option Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 12/14] i386-reg.tbl: Add a comment to reflect dependency on ordering Indu Bhagat
2024-01-03  7:15 ` [PATCH,V4 13/14] gas: testsuite: add a x86_64 testsuite for SCFI Indu Bhagat
2024-01-05 14:22   ` Jan Beulich [this message]
2024-01-05 22:29     ` Indu Bhagat
2024-01-08  8:11       ` Jan Beulich
2024-01-03  7:15 ` [PATCH,V4 14/14] gas/NEWS: announce the new SCFI command line option Indu Bhagat
2024-01-03  7:43 ` [PATCH,V4 09/14] opcodes: i386: new marker for insns that implicitly update stack pointer Indu Bhagat
2024-01-05 14:05   ` [PATCH, V4 " Jan Beulich
2024-01-06 10:08     ` Indu Bhagat
2024-01-08  8:12       ` Jan Beulich

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=1c9e7d28-1bef-4d1d-9b51-b1725c8b2f07@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).