• Jakub Kicinski's avatar
    bpf: change parameters of call/branch offset adjustment · 2cbd95a5
    Jakub Kicinski authored
    In preparation for code removal change parameters to branch
    and call adjustment functions to be more universal.  The
    current parameters assume we are patching a single instruction
    with a longer set.
    
    A diagram may help reading the change, this is for the patch
    single case, patching instruction 1 with a replacement of 4:
       ____
    0 |____|
    1 |____| <-- pos                ^
    2 |    | <-- end old  ^         |
    3 |    |              |  delta  |  len
    4 |____|              |         |  (patch region)
    5 |    | <-- end new  v         v
    6 |____|
    
    end_old = pos + 1
    end_new = pos + delta + 1
    
    If we are before the patch region - curr variable and the target
    are fully in old coordinates (hence comparing against end_old).
    If we are after the region curr is in new coordinates (hence
    the comparison to end_new) but target is in mixed coordinates,
    so we just check if it falls before end_new, and if so it needs
    the adjustment.
    
    Note that we will not fix up branches which land in removed region
    in case of removal, which should be okay, as we are only going to
    remove dead code.
    Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    2cbd95a5
core.c 52.4 KB