[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xen/arch/x86: Fix early boot command line parsing



On Tue, Dec 03, 2013 at 02:14:18AM +0000, Andrew Cooper wrote:
> On 02/12/2013 19:15, Daniel Kiper wrote:
> > There is no reliable way to encode nul character as a character so encode
> > it as a number. Read: 
> > http://sourceware.org/binutils/docs/as/Characters.html.
> > Octal and hex encoding does not work on at least my system (GNU assembler
> > version 2.22 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 
> > 2.22).
> > Without this fix e.g. no-real-mode option at the end of xen.gz command line
> > is not detected. Additionally, encode other characters accordingly to
> > the gas documentation.
> >
> > Signed-off-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx>
> > ---
> >  xen/arch/x86/boot/cmdline.S |    6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/xen/arch/x86/boot/cmdline.S b/xen/arch/x86/boot/cmdline.S
> > index 05ffb94..4ea56b3 100644
> > --- a/xen/arch/x86/boot/cmdline.S
> > +++ b/xen/arch/x86/boot/cmdline.S
> > @@ -138,11 +138,11 @@
> >          call    .Lstrlen
> >          add     $4,%esp
> >          xadd    %eax,%ebx
> > -        cmpb    $'\0',(%ebx)
> > +        cmpb    $0,(%ebx)
> >          je      3f
> > -        cmpb    $' ',(%ebx)
> > +        cmpb    $' ,(%ebx)
> >          je      3f
> > -        cmpb    $'=',(%ebx)
> > +        cmpb    $'=,(%ebx)
> >          jne     1b
> >  3:      pop     %ebx
> >          ret
>
> My version of binutils 2.22 for Debian Wheezy does perfectly well with
> these constants as-are.
>
> What does the disassembly from your toolchain look like?  I find it

objdump -dm i386 xen/arch/x86/boot/head.o

[...]

     29f:       0f c1 c3                xadd   %eax,%ebx
     2a2:       80 3b 30                cmpb   $0x30,(%ebx)
                                               ^^^^^ == '0' != NUL
     2a5:       74 0a                   je     2b1 <__start+0x246>
     2a7:       80 3b 20                cmpb   $0x20,(%ebx)
     2aa:       74 05                   je     2b1 <__start+0x246>
     2ac:       80 3b 3d                cmpb   $0x3d,(%ebx)
     2af:       75 c2                   jne    273 <__start+0x208>

> quite hard to believe that the above syntax has been broken by a recent
> version of binutils.

I see the same issue on older machines too. If you show me how to encode
NUL in gas assembly file I am happy to do that. Current notation does
not work. Please test with no-real-mode (or other option checked
at early boot stage) at the end of Xen boot command line. It is
completely ignored. Once I found description of that issue somewhere
but I do not remember where. Later I was hurt by it during EFI work.

Daniel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.