On Thu, 2024-02-08 at 20:06 -0800, Alexei Starovoitov wrote: > From: Alexei Starovoitov <ast@xxxxxxxxxx> > > LLVM automatically places __arena variables into ".arena.1" ELF section. > When libbpf sees such section it creates internal 'struct bpf_map' LIBBPF_MAP_ARENA > that is connected to actual BPF_MAP_TYPE_ARENA 'struct bpf_map'. > They share the same kernel's side bpf map and single map_fd. > Both are emitted into skeleton. Real arena with the name given by bpf program > in SEC(".maps") and another with "__arena_internal" name. > All global variables from ".arena.1" section are accessible from user space > via skel->arena->name_of_var. [...] I hit a strange bug when playing with patch. Consider a simple example [0]. When the following BPF global variable: int __arena * __arena bar; - is commented -- the test passes; - is uncommented -- in the test fails because global variable 'shared' is NULL. Note: the second __arena is necessary to put 'bar' to .arena.1 section. [0] https://github.com/kernel-patches/bpf/commit/6d95c8557c25d01ef3f13e6aef2bda9ac2516484