• Marc Zyngier's avatar
    arm64: alternatives: Add dynamic patching feature · dea5e2a4
    Marc Zyngier authored
    We've so far relied on a patching infrastructure that only gave us
    a single alternative, without any way to provide a range of potential
    replacement instructions. For a single feature, this is an all or
    nothing thing.
    
    It would be interesting to have a more flexible grained way of patching
    the kernel though, where we could dynamically tune the code that gets
    injected.
    
    In order to achive this, let's introduce a new form of dynamic patching,
    assiciating a callback to a patching site. This callback gets source and
    target locations of the patching request, as well as the number of
    instructions to be patched.
    
    Dynamic patching is declared with the new ALTERNATIVE_CB and alternative_cb
    directives:
    
    	asm volatile(ALTERNATIVE_CB("mov %0, #0\n", callback)
    		     : "r" (v));
    or
    	alternative_cb callback
    		mov	x0, #0
    	alternative_cb_end
    
    where callback is the C function computing the alternative.
    Reviewed-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    dea5e2a4
alternative.c 5.16 KB