diff mbox series

selftests: kvm: remove reassignment of non-absolute variables

Message ID 20201210043611.3156624-1-morbo@google.com (mailing list archive)
State New
Headers show
Series selftests: kvm: remove reassignment of non-absolute variables | expand

Commit Message

Bill Wendling Dec. 10, 2020, 4:36 a.m. UTC
Clang's integrated assembler does not allow symbols with non-absolute
values to be reassigned. Modify the interrupt entry loop macro to be
compatible with IAS by using a label and an offset.

Cc: Jian Cai <caij2003@gmail.com>
Signed-off-by: Bill Wendling <morbo@google.com>
References: https://lore.kernel.org/lkml/20200714233024.1789985-1-caij2003@gmail.com/
---
 tools/testing/selftests/kvm/lib/x86_64/handlers.S | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Sean Christopherson Dec. 11, 2020, 12:50 a.m. UTC | #1
On Wed, Dec 09, 2020, Bill Wendling wrote:
> Clang's integrated assembler does not allow symbols with non-absolute
> values to be reassigned. Modify the interrupt entry loop macro to be
> compatible with IAS by using a label and an offset.
> 
> Cc: Jian Cai <caij2003@gmail.com>
> Signed-off-by: Bill Wendling <morbo@google.com>
> References: https://lore.kernel.org/lkml/20200714233024.1789985-1-caij2003@gmail.com/
> ---
>  tools/testing/selftests/kvm/lib/x86_64/handlers.S | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/kvm/lib/x86_64/handlers.S b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> index aaf7bc7d2ce1..3f9181e9a0a7 100644
> --- a/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> +++ b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> @@ -54,9 +54,9 @@ idt_handlers:
>  	.align 8
>  
>  	/* Fetch current address and append it to idt_handlers. */
> -	current_handler = .
> +0 :
>  .pushsection .rodata
> -.quad current_handler
> +	.quad 0b

Bit of a silly nit: can we use a named label, or at least a non-zero shorthand?
It's really easy to misread "0b" as zeroing out the value, at least for me.

>  .popsection
>  
>  	.if ! \has_error
> -- 
> 2.29.2.576.ga3fc446d84-goog
>
Bill Wendling Dec. 11, 2020, 1:04 a.m. UTC | #2
On Thu, Dec 10, 2020 at 4:50 PM Sean Christopherson <seanjc@google.com> wrote:
>
> On Wed, Dec 09, 2020, Bill Wendling wrote:
> > Clang's integrated assembler does not allow symbols with non-absolute
> > values to be reassigned. Modify the interrupt entry loop macro to be
> > compatible with IAS by using a label and an offset.
> >
> > Cc: Jian Cai <caij2003@gmail.com>
> > Signed-off-by: Bill Wendling <morbo@google.com>
> > References: https://lore.kernel.org/lkml/20200714233024.1789985-1-caij2003@gmail.com/
> > ---
> >  tools/testing/selftests/kvm/lib/x86_64/handlers.S | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/testing/selftests/kvm/lib/x86_64/handlers.S b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > index aaf7bc7d2ce1..3f9181e9a0a7 100644
> > --- a/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > +++ b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > @@ -54,9 +54,9 @@ idt_handlers:
> >       .align 8
> >
> >       /* Fetch current address and append it to idt_handlers. */
> > -     current_handler = .
> > +0 :
> >  .pushsection .rodata
> > -.quad current_handler
> > +     .quad 0b
>
> Bit of a silly nit: can we use a named label, or at least a non-zero shorthand?
> It's really easy to misread "0b" as zeroing out the value, at least for me.
>
I don't believe that will work. If I rename "0 :" to something more
concrete, like ".Lcurrent :", then the label's redefined because of
the ".rept". If I assign the "0b" to something, we're back with the
unmodified code, which clang issues an error for:

<instantiation>:3500:6: error: invalid reassignment of non-absolute variable 'x'
 x = 0b
     ^
<instantiation>:2:2: note: while in macro instantiation
 .rept 255 - 18 + 1
 ^

> >  .popsection
> >
> >       .if ! \has_error
> > --
> > 2.29.2.576.ga3fc446d84-goog
> >
Sean Christopherson Dec. 11, 2020, 1:07 a.m. UTC | #3
On Thu, Dec 10, 2020, Bill Wendling wrote:
> On Thu, Dec 10, 2020 at 4:50 PM Sean Christopherson <seanjc@google.com> wrote:
> >
> > On Wed, Dec 09, 2020, Bill Wendling wrote:
> > > Clang's integrated assembler does not allow symbols with non-absolute
> > > values to be reassigned. Modify the interrupt entry loop macro to be
> > > compatible with IAS by using a label and an offset.
> > >
> > > Cc: Jian Cai <caij2003@gmail.com>
> > > Signed-off-by: Bill Wendling <morbo@google.com>
> > > References: https://lore.kernel.org/lkml/20200714233024.1789985-1-caij2003@gmail.com/
> > > ---
> > >  tools/testing/selftests/kvm/lib/x86_64/handlers.S | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/tools/testing/selftests/kvm/lib/x86_64/handlers.S b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > index aaf7bc7d2ce1..3f9181e9a0a7 100644
> > > --- a/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > +++ b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > @@ -54,9 +54,9 @@ idt_handlers:
> > >       .align 8
> > >
> > >       /* Fetch current address and append it to idt_handlers. */
> > > -     current_handler = .
> > > +0 :
> > >  .pushsection .rodata
> > > -.quad current_handler
> > > +     .quad 0b
> >
> > Bit of a silly nit: can we use a named label, or at least a non-zero shorthand?
> > It's really easy to misread "0b" as zeroing out the value, at least for me.
> >
> I don't believe that will work. If I rename "0 :" to something more
> concrete, like ".Lcurrent :", then the label's redefined because of
> the ".rept". If I assign the "0b" to something, we're back with the
> unmodified code, which clang issues an error for:
> 
> <instantiation>:3500:6: error: invalid reassignment of non-absolute variable 'x'
>  x = 0b
>      ^
> <instantiation>:2:2: note: while in macro instantiation
>  .rept 255 - 18 + 1

Boo.  I assume 1: and 1b work?  Or my KVM favorite "666:" :-)  That's enough to
at least make me pause and actually read the code.

>  ^
> 
> > >  .popsection
> > >
> > >       .if ! \has_error
> > > --
> > > 2.29.2.576.ga3fc446d84-goog
> > >
Bill Wendling Dec. 11, 2020, 1:10 a.m. UTC | #4
On Thu, Dec 10, 2020 at 5:07 PM Sean Christopherson <seanjc@google.com> wrote:
> On Thu, Dec 10, 2020, Bill Wendling wrote:
> > On Thu, Dec 10, 2020 at 4:50 PM Sean Christopherson <seanjc@google.com> wrote:
> > > On Wed, Dec 09, 2020, Bill Wendling wrote:
> > > > Clang's integrated assembler does not allow symbols with non-absolute
> > > > values to be reassigned. Modify the interrupt entry loop macro to be
> > > > compatible with IAS by using a label and an offset.
> > > >
> > > > Cc: Jian Cai <caij2003@gmail.com>
> > > > Signed-off-by: Bill Wendling <morbo@google.com>
> > > > References: https://lore.kernel.org/lkml/20200714233024.1789985-1-caij2003@gmail.com/
> > > > ---
> > > >  tools/testing/selftests/kvm/lib/x86_64/handlers.S | 4 ++--
> > > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/tools/testing/selftests/kvm/lib/x86_64/handlers.S b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > > index aaf7bc7d2ce1..3f9181e9a0a7 100644
> > > > --- a/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > > +++ b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > > @@ -54,9 +54,9 @@ idt_handlers:
> > > >       .align 8
> > > >
> > > >       /* Fetch current address and append it to idt_handlers. */
> > > > -     current_handler = .
> > > > +0 :
> > > >  .pushsection .rodata
> > > > -.quad current_handler
> > > > +     .quad 0b
> > >
> > > Bit of a silly nit: can we use a named label, or at least a non-zero shorthand?
> > > It's really easy to misread "0b" as zeroing out the value, at least for me.
> > >
> > I don't believe that will work. If I rename "0 :" to something more
> > concrete, like ".Lcurrent :", then the label's redefined because of
> > the ".rept". If I assign the "0b" to something, we're back with the
> > unmodified code, which clang issues an error for:
> >
> > <instantiation>:3500:6: error: invalid reassignment of non-absolute variable 'x'
> >  x = 0b
> >      ^
> > <instantiation>:2:2: note: while in macro instantiation
> >  .rept 255 - 18 + 1
>
> Boo.  I assume 1: and 1b work?  Or my KVM favorite "666:" :-)  That's enough to
> at least make me pause and actually read the code.
>
Ah! I missed the second part of your message (about the non-zero
shorthand). That should work. Sorry about that. :-) Should I submit a
new version of this patch?

-bw
Sean Christopherson Dec. 11, 2020, 1:19 a.m. UTC | #5
On Thu, Dec 10, 2020, Bill Wendling wrote:
> On Thu, Dec 10, 2020 at 5:07 PM Sean Christopherson <seanjc@google.com> wrote:
> > On Thu, Dec 10, 2020, Bill Wendling wrote:
> > > On Thu, Dec 10, 2020 at 4:50 PM Sean Christopherson <seanjc@google.com> wrote:
> > > > On Wed, Dec 09, 2020, Bill Wendling wrote:
> > > > > Clang's integrated assembler does not allow symbols with non-absolute
> > > > > values to be reassigned. Modify the interrupt entry loop macro to be
> > > > > compatible with IAS by using a label and an offset.
> > > > >
> > > > > Cc: Jian Cai <caij2003@gmail.com>
> > > > > Signed-off-by: Bill Wendling <morbo@google.com>
> > > > > References: https://lore.kernel.org/lkml/20200714233024.1789985-1-caij2003@gmail.com/
> > > > > ---
> > > > >  tools/testing/selftests/kvm/lib/x86_64/handlers.S | 4 ++--
> > > > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > > >
> > > > > diff --git a/tools/testing/selftests/kvm/lib/x86_64/handlers.S b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > > > index aaf7bc7d2ce1..3f9181e9a0a7 100644
> > > > > --- a/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > > > +++ b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > > > @@ -54,9 +54,9 @@ idt_handlers:
> > > > >       .align 8
> > > > >
> > > > >       /* Fetch current address and append it to idt_handlers. */
> > > > > -     current_handler = .
> > > > > +0 :
> > > > >  .pushsection .rodata
> > > > > -.quad current_handler
> > > > > +     .quad 0b
> > > >
> > > > Bit of a silly nit: can we use a named label, or at least a non-zero shorthand?
> > > > It's really easy to misread "0b" as zeroing out the value, at least for me.
> > > >
> > > I don't believe that will work. If I rename "0 :" to something more
> > > concrete, like ".Lcurrent :", then the label's redefined because of
> > > the ".rept". If I assign the "0b" to something, we're back with the
> > > unmodified code, which clang issues an error for:
> > >
> > > <instantiation>:3500:6: error: invalid reassignment of non-absolute variable 'x'
> > >  x = 0b
> > >      ^
> > > <instantiation>:2:2: note: while in macro instantiation
> > >  .rept 255 - 18 + 1
> >
> > Boo.  I assume 1: and 1b work?  Or my KVM favorite "666:" :-)  That's enough to
> > at least make me pause and actually read the code.
> >
> Ah! I missed the second part of your message (about the non-zero
> shorthand). That should work. Sorry about that. :-) Should I submit a
> new version of this patch?

That'd probably be easiest.  This is trivial enought to fixup when applying, but
we might as well save a few of Paolo's cycles for other things.

Thanks!
Jim Mattson Dec. 11, 2020, 1:36 a.m. UTC | #6
By non-zero, I think Sean means something like:

666:
.pushsection .rodata
.quad 666b


On Thu, Dec 10, 2020 at 5:34 PM Bill Wendling <morbo@google.com> wrote:
>
> On Thu, Dec 10, 2020 at 4:50 PM Sean Christopherson <seanjc@google.com> wrote:
> >
> > On Wed, Dec 09, 2020, Bill Wendling wrote:
> > > Clang's integrated assembler does not allow symbols with non-absolute
> > > values to be reassigned. Modify the interrupt entry loop macro to be
> > > compatible with IAS by using a label and an offset.
> > >
> > > Cc: Jian Cai <caij2003@gmail.com>
> > > Signed-off-by: Bill Wendling <morbo@google.com>
> > > References: https://lore.kernel.org/lkml/20200714233024.1789985-1-caij2003@gmail.com/
> > > ---
> > >  tools/testing/selftests/kvm/lib/x86_64/handlers.S | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/tools/testing/selftests/kvm/lib/x86_64/handlers.S b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > index aaf7bc7d2ce1..3f9181e9a0a7 100644
> > > --- a/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > +++ b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
> > > @@ -54,9 +54,9 @@ idt_handlers:
> > >       .align 8
> > >
> > >       /* Fetch current address and append it to idt_handlers. */
> > > -     current_handler = .
> > > +0 :
> > >  .pushsection .rodata
> > > -.quad current_handler
> > > +     .quad 0b
> >
> > Bit of a silly nit: can we use a named label, or at least a non-zero shorthand?
> > It's really easy to misread "0b" as zeroing out the value, at least for me.
> >
> I don't believe that will work. If I rename "0 :" to something more
> concrete, like ".Lcurrent :", then the label's redefined because of
> the ".rept". If I assign the "0b" to something, we're back with the
> unmodified code, which clang issues an error for:
>
> <instantiation>:3500:6: error: invalid reassignment of non-absolute variable 'x'
>  x = 0b
>      ^
> <instantiation>:2:2: note: while in macro instantiation
>  .rept 255 - 18 + 1
>  ^
>
> > >  .popsection
> > >
> > >       .if ! \has_error
> > > --
> > > 2.29.2.576.ga3fc446d84-goog
> > >
diff mbox series

Patch

diff --git a/tools/testing/selftests/kvm/lib/x86_64/handlers.S b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
index aaf7bc7d2ce1..3f9181e9a0a7 100644
--- a/tools/testing/selftests/kvm/lib/x86_64/handlers.S
+++ b/tools/testing/selftests/kvm/lib/x86_64/handlers.S
@@ -54,9 +54,9 @@  idt_handlers:
 	.align 8
 
 	/* Fetch current address and append it to idt_handlers. */
-	current_handler = .
+0 :
 .pushsection .rodata
-.quad current_handler
+	.quad 0b
 .popsection
 
 	.if ! \has_error