• Peter Zijlstra's avatar
    x86/xen: Rework the xen_{cpu,irq,mmu}_opsarrays · 1462eb38
    Peter Zijlstra authored
    In order to allow objtool to make sense of all the various paravirt
    functions, it needs to either parse whole pv_ops[] tables, or observe
    individual assignments in the form:
    
      bf87:       48 c7 05 00 00 00 00 00 00 00 00        movq   $0x0,0x0(%rip)
        bf92 <xen_init_spinlocks+0x5f>
        bf8a: R_X86_64_PC32     pv_ops+0x268
    
    As is, xen_cpu_ops[] is at offset +0 in pv_ops[] and could thus be
    parsed as a 'normal' pv_ops[] table, however xen_irq_ops[] and
    xen_mmu_ops[] are not.
    
    Worse, both the latter two are compiled into the individual assignment
    for by current GCC, but that's not something one can rely on.
    
    Therefore, convert all three into full pv_ops[] tables. This has the
    benefit of not needing to teach objtool about the offsets and
    resulting in more conservative code-gen.
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Link: https://lore.kernel.org/r/20210624095149.057262522@infradead.org
    1462eb38
mmu_pv.c 63.1 KB