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

Re: [Xen-devel] [PATCH v7 08/14] x86: add multiboot2 protocol support for EFI platforms



On Mon, Sep 26, 2016 at 09:12:40AM -0600, Jan Beulich wrote:
> >>> On 26.09.16 at 16:40, <andrew.cooper3@xxxxxxxxxx> wrote:
> > On 26/09/16 15:33, Jan Beulich wrote:
> >>>>> On 26.09.16 at 16:19, <andrew.cooper3@xxxxxxxxxx> wrote:
> >>> On 23/09/16 22:47, Daniel Kiper wrote:
> >>>> +        /*
> >>>> +         * Initialize BSS (no nasty surprises!).
> >>>> +         * It must be done earlier than in BIOS case
> >>>> +         * because efi_multiboot2() touches it.
> >>>> +         */
> >>>> +        lea     .startof.(.bss)(%rip),%edi
> >>>> +        mov     $.sizeof.(.bss),%ecx
> >>> Sorry, but you cannot use this syntax, for the same reasons why I won't
> >>> accept Jan's patch making similar changes elsewhere.
> >>>
> >>> Amongst other issues, you will break the Clang build with it.
> >> Did you verify meanwhile that this doesn't work with llvm?
> >
> > Yes.
> >
> > andrewcoop@andrewcoop:/local/xen.git/xen$ cat foo.c
> > #include <stdio.h>
> >
> > static unsigned int x;
> >
> > int main(void)
> > {
> >     asm volatile("lea .startof.(.bss)(%%rip), %%rdi;"
> >                  "mov $.sizeof.(.bss), %%rcx;"
> >                  "mov $-1, %%rax;"
> >                  "rep stosb;"
> >                  ::: "memory", "rax", "rcx", "rdi");
> >     printf("x: %#x\n", x);
> > }
> > andrewcoop@andrewcoop:/local/xen.git/xen$ gcc foo.c -o foo && ./foo
> > x: 0xffffffff
> > andrewcoop@andrewcoop:/local/xen.git/xen$ clang-3.8 foo.c -o foo && ./foo
> > foo.c:7:18: error: unexpected token in memory operand
> >     asm volatile("lea .startof.(.bss)(%%rip), %%rdi;"
> >                  ^
> > <inline asm>:1:16: note: instantiated into assembly here
> >         lea .startof.(.bss)(%rip), %rdi;mov $.sizeof.(.bss), %rcx;mov
> > $-1, %rax;rep stosb;
> >                       ^
> > foo.c:7:18: error: unexpected token in argument list
> >     asm volatile("lea .startof.(.bss)(%%rip), %%rdi;"
> >                  ^
> > <inline asm>:1:47: note: instantiated into assembly here
> >         lea .startof.(.bss)(%rip), %rdi;mov $.sizeof.(.bss), %rcx;mov
> > $-1, %rax;rep stosb;
> >                                                      ^
> > 2 errors generated.
>
> No, that's inline assembly, which does not match Daniel's use
> case. That's why I referred to llvm, as with assembly sources it
> should only be the linker which gets to see the symbols generated
> from those constructs (and if llvm supported them I'd then consider
> breaking out the assembly file changes from that patch of mine).

Guys, may I suggest using sym_phys(__bss_start)/sym_phys(__bss_end) as
it is in head.S right now? If .startof.()/.sizeof.() works as expected
and both of you accept it then later we can move to new approach. Does
it make sense?

Daniel

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

 


Rackspace

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