On Tue, Jan 25, 2022 at 5:20 PM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > On Tue, Jan 25, 2022 at 4:50 PM Song Liu <song@xxxxxxxxxx> wrote: > > > > On Tue, Jan 25, 2022 at 4:38 PM Alexei Starovoitov > > <alexei.starovoitov@xxxxxxxxx> wrote: > > > [...] > > > > > > > > In bpf_jit_binary_hdr(), we calculate header as image & PAGE_MASK. > > > > If we want s/PAGE_MASK/63 for x86_64, we will have different versions > > > > of bpf_jit_binary_hdr(). It is not on any hot path, so we can use __weak for > > > > it. Other than this, I think the solution works fine. > > > > > > I think it can stay generic. > > > > > > The existing bpf_jit_binary_hdr() will do & PAGE_MASK > > > while bpf_jit_binary_hdr_pack() will do & 63. > > > > The problem with this approach is that we need bpf_prog_ksym_set_addr > > to be smart to pick bpf_jit_binary_hdr() or bpf_jit_binary_hdr_pack(). > > We can probably add a true JIT image size to bpf_prog_aux. > bpf_prog_ksym_set_addr() is approximating the end: > prog->aux->ksym.end = addr + hdr->pages * PAGE_SIZE > which doesn't have to include all the 'int 3' padding after the end. > > Or add a flag to bpf_prog_aux. > Ideally bpf_jit_free() would stay generic too. Both ideas sound promising. Let me try to implement them and see which is better (or maybe we get both). Thanks for the suggestions! Song