diff mbox

compiling master.

Message ID 20161103065317.8537-1-naveen.n.rao@linux.vnet.ibm.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Naveen N. Rao Nov. 3, 2016, 6:53 a.m. UTC
On 2016/11/03 03:55PM, Nicholas Piggin wrote:
> On Wed, 2 Nov 2016 13:49:39 +0300
> Denis Kirjanov <kda@linux-powerpc.org> wrote:
> 
> > Hi guys,
> > 
> > compiling ppc head with bunch of asm errors on power8 box (gcc version 4.8.3 )
> > checked commit log but found nothing special. Looks like it's asm issue?
> > Has anybody seen that?
> > 
> > arch/powerpc/kernel/exceptions-64s.S: Assembler messages:
> > arch/powerpc/kernel/exceptions-64s.S:421: Error: operand out of range
> > (0xffffffffffff8680 is not between 0x0000000000000000 and
> > 0x000000000000ffff)
> 
> Hey, thanks for the report. It's likely due to the exception vectors rewrite,
> and yes it's an assembler issue (what's your binutils version?). Your errors
> look like they're coming from LOAD_HANDLER(). For some reason it seems to be
> interpreting the immediate as signed, or the actual calculation ends up being
> negative, neither of which should happen.
> 
> It might take a bit of trial and error, and the assembler doesn't give a lot
> of good options to debug it, so if I can reproduce it here with your bintuils
> version it will be helpful.

I saw this issue when trying to do a BE build on RHEL 7.1. The below
fixes this for me and it indeed looks like an issue with the assembler.
Interestingly, the same assembler version on RHEL 7.1 LE does not throw
these errors.

[root@rhel71be linux]# gcc --version
gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-8)
<snip>
[root@rhel71be linux]# as --version
GNU assembler version 2.23.52.0.1-26.el7 20130226
<snip>

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/exception-64s.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Nicholas Piggin Nov. 3, 2016, 7:09 a.m. UTC | #1
On Thu,  3 Nov 2016 12:23:17 +0530
"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> wrote:

> On 2016/11/03 03:55PM, Nicholas Piggin wrote:
> > On Wed, 2 Nov 2016 13:49:39 +0300
> > Denis Kirjanov <kda@linux-powerpc.org> wrote:
> >   
> > > Hi guys,
> > > 
> > > compiling ppc head with bunch of asm errors on power8 box (gcc version 4.8.3 )
> > > checked commit log but found nothing special. Looks like it's asm issue?
> > > Has anybody seen that?
> > > 
> > > arch/powerpc/kernel/exceptions-64s.S: Assembler messages:
> > > arch/powerpc/kernel/exceptions-64s.S:421: Error: operand out of range
> > > (0xffffffffffff8680 is not between 0x0000000000000000 and
> > > 0x000000000000ffff)  
> > 
> > Hey, thanks for the report. It's likely due to the exception vectors rewrite,
> > and yes it's an assembler issue (what's your binutils version?). Your errors
> > look like they're coming from LOAD_HANDLER(). For some reason it seems to be
> > interpreting the immediate as signed, or the actual calculation ends up being
> > negative, neither of which should happen.
> > 
> > It might take a bit of trial and error, and the assembler doesn't give a lot
> > of good options to debug it, so if I can reproduce it here with your bintuils
> > version it will be helpful.  
> 
> I saw this issue when trying to do a BE build on RHEL 7.1. The below
> fixes this for me and it indeed looks like an issue with the assembler.
> Interestingly, the same assembler version on RHEL 7.1 LE does not throw
> these errors.
> 
> [root@rhel71be linux]# gcc --version
> gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-8)
> <snip>
> [root@rhel71be linux]# as --version
> GNU assembler version 2.23.52.0.1-26.el7 20130226
> <snip>
> 
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
> ---
>  arch/powerpc/include/asm/exception-64s.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h
> index 2e4e7d8..9b7b302 100644
> --- a/arch/powerpc/include/asm/exception-64s.h
> +++ b/arch/powerpc/include/asm/exception-64s.h
> @@ -91,7 +91,7 @@
>   */
>  #define LOAD_HANDLER(reg, label)					\
>  	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
> -	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
> +	ori	reg,reg,((FIXED_SYMBOL_ABS_ADDR(label)) & 0xffff);
>  
>  /* Exception register prefixes */
>  #define EXC_HV	H

Thanks for taking a look. Does this patch fix it, or just hide the build
error? This would presumably hide real bugs too, so it will be good if we
can make it conditional on older assemblers, or otherwise do a test for
out of bounds value (you could try asm directives like .if/.error)

Thanks,
Nick
Denis Kirjanov Nov. 3, 2016, 8:18 a.m. UTC | #2
On 11/3/16, Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> wrote:
> On 2016/11/03 03:55PM, Nicholas Piggin wrote:
>> On Wed, 2 Nov 2016 13:49:39 +0300
>> Denis Kirjanov <kda@linux-powerpc.org> wrote:
>>
>> > Hi guys,
>> >
>> > compiling ppc head with bunch of asm errors on power8 box (gcc version
>> > 4.8.3 )
>> > checked commit log but found nothing special. Looks like it's asm
>> > issue?
>> > Has anybody seen that?
>> >
>> > arch/powerpc/kernel/exceptions-64s.S: Assembler messages:
>> > arch/powerpc/kernel/exceptions-64s.S:421: Error: operand out of range
>> > (0xffffffffffff8680 is not between 0x0000000000000000 and
>> > 0x000000000000ffff)
>>
>> Hey, thanks for the report. It's likely due to the exception vectors
>> rewrite,
>> and yes it's an assembler issue (what's your binutils version?). Your
>> errors
>> look like they're coming from LOAD_HANDLER(). For some reason it seems to
>> be
>> interpreting the immediate as signed, or the actual calculation ends up
>> being
>> negative, neither of which should happen.
>>
>> It might take a bit of trial and error, and the assembler doesn't give a
>> lot
>> of good options to debug it, so if I can reproduce it here with your
>> bintuils
>> version it will be helpful.
>
> I saw this issue when trying to do a BE build on RHEL 7.1. The below
> fixes this for me and it indeed looks like an issue with the assembler.
> Interestingly, the same assembler version on RHEL 7.1 LE does not throw
> these errors.
>
> [root@rhel71be linux]# gcc --version
> gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-8)
> <snip>
> [root@rhel71be linux]# as --version
> GNU assembler version 2.23.52.0.1-26.el7 20130226
> <snip>
>
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>

Yep, it works. thanks!

> ---
>  arch/powerpc/include/asm/exception-64s.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/include/asm/exception-64s.h
> b/arch/powerpc/include/asm/exception-64s.h
> index 2e4e7d8..9b7b302 100644
> --- a/arch/powerpc/include/asm/exception-64s.h
> +++ b/arch/powerpc/include/asm/exception-64s.h
> @@ -91,7 +91,7 @@
>   */
>  #define LOAD_HANDLER(reg, label)					\
>  	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
> -	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
> +	ori	reg,reg,((FIXED_SYMBOL_ABS_ADDR(label)) & 0xffff);
>
>  /* Exception register prefixes */
>  #define EXC_HV	H
> --
> 2.10.1
>
>
Michael Ellerman Nov. 3, 2016, 9:51 a.m. UTC | #3
"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> writes:
> diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h
> index 2e4e7d8..9b7b302 100644
> --- a/arch/powerpc/include/asm/exception-64s.h
> +++ b/arch/powerpc/include/asm/exception-64s.h
> @@ -91,7 +91,7 @@
>   */
>  #define LOAD_HANDLER(reg, label)					\
>  	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
> -	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
> +	ori	reg,reg,((FIXED_SYMBOL_ABS_ADDR(label)) & 0xffff);

That's weird. We explicitly added the @l there to make it work with
binutils 2.22. Is the Redhat "2.23" not really 2.23 ?

cheers
Naveen N. Rao Nov. 3, 2016, 10:30 a.m. UTC | #4
On 2016/11/03 08:51PM, Michael Ellerman wrote:
> "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> writes:
> > diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h
> > index 2e4e7d8..9b7b302 100644
> > --- a/arch/powerpc/include/asm/exception-64s.h
> > +++ b/arch/powerpc/include/asm/exception-64s.h
> > @@ -91,7 +91,7 @@
> >   */
> >  #define LOAD_HANDLER(reg, label)					\
> >  	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
> > -	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
> > +	ori	reg,reg,((FIXED_SYMBOL_ABS_ADDR(label)) & 0xffff);
> 
> That's weird. We explicitly added the @l there to make it work with
> binutils 2.22. Is the Redhat "2.23" not really 2.23 ?

Not sure why @l isn't working. It does seem to be 2.23. Also, it is a 
bit weird that this only shows up on BE and not on LE...

[root@rhel71be linux]# rpm -qf /usr/bin/as
binutils-2.23.52.0.1-30.el7.ppc64
[root@rhel71be linux]# rpm -qi binutils
Name        : binutils
Version     : 2.23.52.0.1
Release     : 30.el7
Architecture: ppc64
Install Date: Thursday 03 November 2016 03:58:24 PM IST
Group       : Development/Tools
Size        : 14200512
License     : GPLv3+
Signature   : RSA/SHA256, Monday 19 January 2015 10:14:51 PM IST, Key ID 
199e2f91fd431d51
Source RPM  : binutils-2.23.52.0.1-30.el7.src.rpm
Build Date  : Thursday 15 January 2015 10:55:42 PM IST
Build Host  : ppc-020.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://sources.redhat.com/binutils
Summary     : A GNU collection of binary utilities


- Naveen
Naveen N. Rao Nov. 3, 2016, 10:34 a.m. UTC | #5
On 2016/11/03 06:09PM, Nicholas Piggin wrote:
> On Thu,  3 Nov 2016 12:23:17 +0530
> "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> wrote:
> > diff --git a/arch/powerpc/include/asm/exception-64s.h 
> > b/arch/powerpc/include/asm/exception-64s.h
> > index 2e4e7d8..9b7b302 100644
> > --- a/arch/powerpc/include/asm/exception-64s.h
> > +++ b/arch/powerpc/include/asm/exception-64s.h
> > @@ -91,7 +91,7 @@
> >   */
> >  #define LOAD_HANDLER(reg, label)					\
> >  	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
> > -	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
> > +	ori	reg,reg,((FIXED_SYMBOL_ABS_ADDR(label)) & 0xffff);
> >  
> >  /* Exception register prefixes */
> >  #define EXC_HV	H
> 
> Thanks for taking a look. Does this patch fix it, or just hide the build
> error? This would presumably hide real bugs too, so it will be good if we
> can make it conditional on older assemblers, or otherwise do a test for
> out of bounds value (you could try asm directives like .if/.error)

It does seem to fix it for me - the built kernel booted fine ;)

My assembly skills are a bit lacking, but is there a specific reason you 
think that AND'ing with 0xffff is different from using @l?

Thanks,
Naveen
Denis Kirjanov Nov. 3, 2016, 10:52 a.m. UTC | #6
On 11/3/16, Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> wrote:
> On 2016/11/03 08:51PM, Michael Ellerman wrote:
>> "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> writes:
>> > diff --git a/arch/powerpc/include/asm/exception-64s.h
>> > b/arch/powerpc/include/asm/exception-64s.h
>> > index 2e4e7d8..9b7b302 100644
>> > --- a/arch/powerpc/include/asm/exception-64s.h
>> > +++ b/arch/powerpc/include/asm/exception-64s.h
>> > @@ -91,7 +91,7 @@
>> >   */
>> >  #define LOAD_HANDLER(reg, label)					\
>> >  	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
>> > -	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
>> > +	ori	reg,reg,((FIXED_SYMBOL_ABS_ADDR(label)) & 0xffff);
>>
>> That's weird. We explicitly added the @l there to make it work with
>> binutils 2.22. Is the Redhat "2.23" not really 2.23 ?

I have the same version: Version     : 2.23.52.0.1

>
> Not sure why @l isn't working. It does seem to be 2.23. Also, it is a
> bit weird that this only shows up on BE and not on LE...
>
> [root@rhel71be linux]# rpm -qf /usr/bin/as
> binutils-2.23.52.0.1-30.el7.ppc64
> [root@rhel71be linux]# rpm -qi binutils
> Name        : binutils
> Version     : 2.23.52.0.1
> Release     : 30.el7
> Architecture: ppc64
> Install Date: Thursday 03 November 2016 03:58:24 PM IST
> Group       : Development/Tools
> Size        : 14200512
> License     : GPLv3+
> Signature   : RSA/SHA256, Monday 19 January 2015 10:14:51 PM IST, Key ID
> 199e2f91fd431d51
> Source RPM  : binutils-2.23.52.0.1-30.el7.src.rpm
> Build Date  : Thursday 15 January 2015 10:55:42 PM IST
> Build Host  : ppc-020.build.eng.bos.redhat.com
> Relocations : (not relocatable)
> Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
> Vendor      : Red Hat, Inc.
> URL         : http://sources.redhat.com/binutils
> Summary     : A GNU collection of binary utilities
>
>
> - Naveen
>
>
Michael Ellerman Nov. 8, 2016, 7:26 a.m. UTC | #7
Can you guys let me know if Hugh's fix works for you?

https://patchwork.ozlabs.org/patch/691753/

cheers
Denis Kirjanov Nov. 8, 2016, 8:21 a.m. UTC | #8
On 11/8/16, Michael Ellerman <mpe@ellerman.id.au> wrote:
> Can you guys let me know if Hugh's fix works for you?
>
> https://patchwork.ozlabs.org/patch/691753/

Ok, the patch works fine for me.

>
> cheers
>
Naveen N. Rao Nov. 8, 2016, 5:33 p.m. UTC | #9
On 2016/11/08 06:26PM, Michael Ellerman wrote:
> Can you guys let me know if Hugh's fix works for you?
> 
> https://patchwork.ozlabs.org/patch/691753/

Yes, that works for me too.

- Naveen
diff mbox

Patch

diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h
index 2e4e7d8..9b7b302 100644
--- a/arch/powerpc/include/asm/exception-64s.h
+++ b/arch/powerpc/include/asm/exception-64s.h
@@ -91,7 +91,7 @@ 
  */
 #define LOAD_HANDLER(reg, label)					\
 	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
-	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
+	ori	reg,reg,((FIXED_SYMBOL_ABS_ADDR(label)) & 0xffff);
 
 /* Exception register prefixes */
 #define EXC_HV	H