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

Re: [Xen-devel] [PATCH v3] x86: remove alternative_callN usage of ALTERNATIVE asm macro



>>> On 29.05.19 at 18:13, <roger.pau@xxxxxxxxxx> wrote:
> There is a bug in llvm that needs to be fixed before switching to use
> the alternative assembly macros in inline assembly call sites.
> Therefore alternative_callN using inline assembly to generate the
> alternative patch sites should be using the ALTERNATIVE C preprocessor
> macro rather than the ALTERNATIVE assembly macro. Using the assembly
> macro in an inline assembly instance triggers the following bug on
> llvm based toolchains:
> 
> <instantiation>:1:1: error: invalid symbol redefinition
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
> ^
> <instantiation>:1:37: error: invalid symbol redefinition
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
>                                     ^
> <instantiation>:1:60: error: invalid reassignment of non-absolute variable 
> '.L0_diff'
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
>                                                            ^
> <inline asm>:1:2: note: while in macro instantiation
>         ALTERNATIVE "call *genapic+64(%rip)", "call .", X86_FEATURE_LM
>         ^
> <instantiation>:1:156: error: invalid symbol redefinition
>   ...- (.L0_orig_e - .L0_orig_s); mknops ((-(.L0_diff > 0)) * .L0_diff); 
> .L0_orig_p:
>                                                                          ^
> <instantiation>:18:5: error: invalid symbol redefinition
>     .L0_repl_s1: call .; .L0_repl_e1:
>     ^
> <instantiation>:18:26: error: invalid symbol redefinition
>     .L0_repl_s1: call .; .L0_repl_e1:
>                          ^
> <instantiation>:1:1: error: invalid symbol redefinition
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
> ^
> <instantiation>:1:37: error: invalid symbol redefinition
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
>                                     ^
> <instantiation>:1:60: error: invalid reassignment of non-absolute variable 
> '.L0_diff'
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
>                                                            ^
> <inline asm>:1:2: note: while in macro instantiation
>         ALTERNATIVE "call *genapic+64(%rip)", "call .", X86_FEATURE_LM
>         ^
> <instantiation>:1:156: error: invalid symbol redefinition
>   ...- (.L0_orig_e - .L0_orig_s); mknops ((-(.L0_diff > 0)) * .L0_diff); 
> .L0_orig_p:
>                                                                          ^
> <instantiation>:18:5: error: invalid symbol redefinition
>     .L0_repl_s1: call .; .L0_repl_e1:
>     ^
> <instantiation>:18:26: error: invalid symbol redefinition
>     .L0_repl_s1: call .; .L0_repl_e1:
>                          ^
> <instantiation>:1:1: error: invalid symbol redefinition
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
> ^
> <instantiation>:1:37: error: invalid symbol redefinition
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
>                                     ^
> <instantiation>:1:60: error: invalid reassignment of non-absolute variable 
> '.L0_diff'
> .L0_orig_s: call *genapic+64(%rip); .L0_orig_e: .L0_diff = (.L0_repl_e1 - 
> .L0_repl_s1) - (...
>                                                            ^
> <inline asm>:1:2: note: while in macro instantiation
>         ALTERNATIVE "call *genapic+64(%rip)", "call .", X86_FEATURE_LM
>         ^
> <instantiation>:1:156: error: invalid symbol redefinition
>   ...- (.L0_orig_e - .L0_orig_s); mknops ((-(.L0_diff > 0)) * .L0_diff); 
> .L0_orig_p:
>                                                                          ^
> <instantiation>:18:5: error: invalid symbol redefinition
>     .L0_repl_s1: call .; .L0_repl_e1:
>     ^
> <instantiation>:18:26: error: invalid symbol redefinition
>     .L0_repl_s1: call .; .L0_repl_e1:
>                          ^
> 
> This has been reported to upstream llvm:
> 
> https://bugs.llvm.org/show_bug.cgi?id=42034 
> 
> Fixes: 67d01cdb5 ("x86: infrastructure to allow converting certain indirect 
> calls to direct ones")
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>

Well, hesitantly,
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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