void added a comment. In D110869#3295477 <https://reviews.llvm.org/D110869#3295477>, @nathanchance wrote:
> It looks like `_paravirt_ident_64()` is the problematic function. This diff > on top of v5.17-rc2 allows me to boot: > > diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c > index 4420499f7bb4..c1b68504136c 100644 > --- a/arch/x86/kernel/paravirt.c > +++ b/arch/x86/kernel/paravirt.c > @@ -96,7 +96,7 @@ static unsigned paravirt_patch_call(void *insn_buff, > const void *target, > > #ifdef CONFIG_PARAVIRT_XXL > /* identity function, which can be inlined */ > -u64 notrace _paravirt_ident_64(u64 x) > +u64 notrace __attribute__((zero_call_used_regs("skip"))) > _paravirt_ident_64(u64 x) > { > return x; > } > > Rather interesting function to have problems with as a result of this patch > but it seems like this function is being used in a very specific way further > down the file with the `__PV_IS_CALLEE_SAVE` macro. Weird. We generate similar code to GCC: Clang: _paravirt_ident_64: # @_paravirt_ident_64 .Lfunc_begin2: .loc 2 100 0 is_stmt 1 # arch/x86/kernel/paravirt.c:100:0 .cfi_startproc # %bb.0: # %entry #DEBUG_VALUE: _paravirt_ident_64:x <- $rdi movq %rdi, %rax .Ltmp21: .loc 2 101 2 prologue_end # arch/x86/kernel/paravirt.c:101:2 xorq %rdi, %rdi .Ltmp22: #DEBUG_VALUE: _paravirt_ident_64:x <- $rax retq .Ltmp23: .Lfunc_end2: .size _paravirt_ident_64, .Lfunc_end2-_paravirt_ident_64 .cfi_endproc GCC: _paravirt_ident_64: # arch/x86/kernel/paravirt.c:100: { movq %rdi, %rax # tmp85, x # arch/x86/kernel/paravirt.c:102: } xorl %edi, %edi # ret .size _paravirt_ident_64, .-_paravirt_ident_64 I'm a bit confused... Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D110869/new/ https://reviews.llvm.org/D110869 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits