[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 5/5] x86: remove usage of .skip with non-absolute expressions
Clang assembler doesn't support using .skip with non-absolute expressions: entry.S:109:15: error: expected absolute expression .skip .Lcr4_alt_end - .Lcr4_alt, 0x90 ^ This usage of .skip was to fill code sections with NOPs in order for them to be patched at run time if required by the alternatives framework. Instead of using .skip use the appropriate number of NOPs to match the size of the alternative code. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Cc: George Dunlap <George.Dunlap@xxxxxxxxxxxxx> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Tim Deegan <tim@xxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> --- xen/Rules.mk | 5 ----- xen/arch/x86/x86_64/compat/entry.S | 9 ++++++++- xen/arch/x86/x86_64/entry.S | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/xen/Rules.mk b/xen/Rules.mk index 205f0aff30..51bcd5804c 100644 --- a/xen/Rules.mk +++ b/xen/Rules.mk @@ -66,11 +66,6 @@ endif AFLAGS-y += -D__ASSEMBLY__ -# Clang's built-in assembler doesn't understand .skip or .rept assembler -# directives without an absolute value: -# https://bugs.llvm.org/show_bug.cgi?id=27369 -AFLAGS-$(clang) += -no-integrated-as - ALL_OBJS := $(ALL_OBJS-y) # Get gcc to generate the dependencies for us. diff --git a/xen/arch/x86/x86_64/compat/entry.S b/xen/arch/x86/x86_64/compat/entry.S index e668f00c36..d94220b6b6 100644 --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -106,7 +106,14 @@ ENTRY(compat_restore_all_guest) mov $~(X86_EFLAGS_IOPL|X86_EFLAGS_NT|X86_EFLAGS_VM),%r11d and UREGS_eflags(%rsp),%r11d .Lcr4_orig: - .skip .Lcr4_alt_end - .Lcr4_alt, 0x90 + ASM_NOP8 /* testb $3,UREGS_cs(%rsp) */ + ASM_NOP2 /* jpe .Lcr4_alt_end */ + ASM_NOP8 /* mov CPUINFO_cr4...(%rsp), %rax */ + ASM_NOP6 /* and $..., %rax */ + ASM_NOP8 /* mov %rax, CPUINFO_cr4...(%rsp) */ + ASM_NOP3 /* mov %rax, %cr4 */ + ASM_NOP8 /* mov %rax, CPUINFO_cr4...(%rsp) */ + ASM_NOP2 /* jne 1b */ .Lcr4_orig_end: .pushsection .altinstr_replacement, "ax" .Lcr4_alt: diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index af703f6c06..d9dce0e421 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -529,7 +529,7 @@ handle_exception_saved: .Lcr4_pv32_orig: jmp .Lcr4_pv32_done - .skip (.Lcr4_pv32_alt_end - .Lcr4_pv32_alt) - (. - .Lcr4_pv32_orig), 0xcc + ASM_NOP2 /* jmp is 2 bytes, the alternative mov is 4 bytes. */ .pushsection .altinstr_replacement, "ax" .Lcr4_pv32_alt: mov VCPU_domain(%rbx),%rax -- 2.15.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |