Then libbpf converts global data with SEC(".percpu") to global percpu data. And bpftool generates struct for global percpu data like for global data when generate skeleton. Finally, verifier inserts a mov64_percpu_reg insn after the ld_imm64 in order to add this_cpu_off to the dst_reg of ld_imm64. Therefore, in check_ld_imm(), it should mark the dst_reg of ld_imm64 for percpu array map as map-value-ptr. Thanks, Leon