[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/ELF: don't store function pointer in elf_core_save_regs()
commit 1e15dcfbaef6ef5b1cdba73408be6bd9dfc27fe9 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Sep 29 10:51:54 2020 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Sep 29 10:51:54 2020 +0200 x86/ELF: don't store function pointer in elf_core_save_regs() This keeps at least gcc 10 from generating a separate function instance in common/kexec.o alongside the inlining of the function in its sole caller. I also think putting the address of the actual code storing the registers is a better indication to consumers than that of an otherwise unreferenced function. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/include/asm-x86/x86_64/elf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/include/asm-x86/x86_64/elf.h b/xen/include/asm-x86/x86_64/elf.h index 09b286422d..43c9cf3a3f 100644 --- a/xen/include/asm-x86/x86_64/elf.h +++ b/xen/include/asm-x86/x86_64/elf.h @@ -54,7 +54,7 @@ static inline void elf_core_save_regs(ELF_Gregset *core_regs, asm volatile("movq %%rsi,%0" : "=m"(core_regs->rsi)); asm volatile("movq %%rdi,%0" : "=m"(core_regs->rdi)); /* orig_rax not filled in for now */ - core_regs->rip = (unsigned long)elf_core_save_regs; + asm ( "call 0f; 0: popq %0" : "=m" (core_regs->rip) ); core_regs->cs = read_sreg(cs); asm volatile("pushfq; popq %0" :"=m"(core_regs->rflags)); asm volatile("movq %%rsp,%0" : "=m"(core_regs->rsp)); -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |