• Ilya Leoshkevich's avatar
    s390/bpf: Load literal pool register using larl · c1aff568
    Ilya Leoshkevich authored
    Currently literal pool register is loaded using basr, which makes it
    point not to the beginning of the literal pool, but rather to the next
    instruction. In case JITed code is larger than 512k, this renders
    literal pool register absolutely useless due to long displacement range
    restrictions.
    
    The solution is to use larl to make literal pool register point to the
    very beginning of the literal pool. This makes it always possible to
    address 512k worth of literal pool entries using long displacement.
    
    However, for short programs, in which the entire literal pool is covered
    by basr-generated base, it is still beneficial to use basr, since it is
    4 bytes shorter than larl.
    
    Detect situations when basr-generated base does not cover the entire
    literal pool, and in such cases use larl instead.
    Signed-off-by: default avatarIlya Leoshkevich <iii@linux.ibm.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20191118180340.68373-4-iii@linux.ibm.com
    c1aff568
bpf_jit_comp.c 42.8 KB