On Mon, Apr 30, 2018 at 12:23:36PM -0400, Boris Ostrovsky wrote: > Latest binutils release (2.29.1) will no longer allow proper computation > of GDT entries on 32-bits, with warning: > > arch/x86/xen/xen-pvh.S: Assembler messages: > arch/x86/xen/xen-pvh.S:150: Warning: shift count out of range (32 is not between 0 and 31) > arch/x86/xen/xen-pvh.S:150: Warning: shift count out of range (40 is not between 0 and 31) > arch/x86/xen/xen-pvh.S:150: Warning: shift count out of range (32 is not between 0 and 31) > arch/x86/xen/xen-pvh.S:152: Warning: shift count out of range (32 is not between 0 and 31) > arch/x86/xen/xen-pvh.S:152: Warning: shift count out of range (40 is not between 0 and 31) > arch/x86/xen/xen-pvh.S:152: Warning: shift count out of range (32 is not between 0 and 31) > > Use explicit value of the entry instead of using GDT_ENTRY() macro. > > Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > --- > arch/x86/xen/xen-pvh.S | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/xen/xen-pvh.S b/arch/x86/xen/xen-pvh.S > index e1a5fbe..934f7d4 100644 > --- a/arch/x86/xen/xen-pvh.S > +++ b/arch/x86/xen/xen-pvh.S > @@ -145,11 +145,11 @@ gdt_start: > .quad 0x0000000000000000 /* NULL descriptor */ > .quad 0x0000000000000000 /* reserved */ > #ifdef CONFIG_X86_64 > - .quad GDT_ENTRY(0xa09a, 0, 0xfffff) /* __KERNEL_CS */ > + .quad 0x00af9a000000ffff /* __BOOT_CS */ > #else > - .quad GDT_ENTRY(0xc09a, 0, 0xfffff) /* __KERNEL_CS */ > + .quad 0x00cf9a000000ffff /* __BOOT_CS */ Maybe it would be cleaner to use something like: .word 0xffff /* limit */ .word 0 /* base */ .byte 0 /* base */ .byte 0x9a /* access */ #ifdef CONFIG_X86_64 .byte 0xaf /* flags plus limit */ #else .byte 0xcf /* flags plus limit */ #endif .byte 0 /* base */ Or try to fix the GDT_ENTRY macro, maybe if you prepend extra 0's to make the values 64bit that would prevent the warnings? Or declare the GDT in enlighten_pvh in C and use it here? Also, IIRC the base/limit values are ignored in long mode. Thanks, Roger.