Hi, I have a program which I use around at most 300byte of local stack as below. The largest struct is the "struct Headers" which is around 80 byte. However, when loading into the verifier, it says
393: (7b) *(u64 *)(r10 -56) = r1 394: (05) goto pc+56 451: (7b) *(u64 *)(r10 -528) = r0 invalid stack off=-528 size=8 I don't think I'm using more than 512byte. It seems that the llvm generates the code which use more stack memory than I thought. Any idea how to debug it? Or how to dump the llvm IR to know how it allocates stack? Thanks snippet of the code: SEC("prog") int ebpf_filter(struct xdp_md* skb){ struct Headers hd; unsigned ebpf_packetOffsetInBits = 0; enum ebpf_errorCodes ebpf_errorCode = NoError; void* ebpf_packetStart = ((void*)(long)skb->data); void* ebpf_packetEnd = ((void*)(long)skb->data_end); u32 ebpf_zero = 0; u8 ebpf_byte = 0; u32 ebpf_outHeaderLength = 0; struct xdp_output xout; /* TODO: this should be initialized by the environment. HOW? */ struct xdp_input xin; goto start; start: { /* extract(hd.ethernet full C, objdump https://gist.github.com/williamtu/5a09b60a951ee5fc062328766403ab4b thanks _______________________________________________ iovisor-dev mailing list iovisor-dev@lists.iovisor.org https://lists.iovisor.org/mailman/listinfo/iovisor-dev