diff --git a/xdp/Makefile b/xdp/Makefile index 56c0863..607b1a9 100644 --- a/xdp/Makefile +++ b/xdp/Makefile @@ -15,20 +15,27 @@ BPF_OBJS := bridge_xdp.o xdp_ddos_filter.o xdp_wg_mtu_optimizer.o all: $(BPF_OBJS) loader af_xdp_user -# Regra genérica: qualquer programa XDP (.c -> .ll -> .o) segue o mesmo -# caminho de compilação. Antes só existia a regra explícita pra -# bridge_xdp.o — xdp_ddos_filter.o e xdp_wg_mtu_optimizer.o que estavam -# na pasta foram gerados por fora do Makefile, então "make" nunca os -# reconstruía depois de editar o .c correspondente. +# Regra genérica: qualquer programa XDP compila num passo só (clang +# direto pra .o, sem o pipeline antigo emit-llvm + llc). Antes só existia +# a regra explícita pra bridge_xdp.o — xdp_ddos_filter.o e +# xdp_wg_mtu_optimizer.o que estavam na pasta foram gerados por fora do +# Makefile, então "make" nunca os reconstruía depois de editar o .c +# correspondente. +# +# -g é OBRIGATÓRIO aqui: os mapas destes programas usam a sintaxe +# moderna (struct { __uint(type,...); ... } SEC(".maps")), que depende +# de BTF pra o libbpf conseguir interpretar. Sem -g não sai BTF, e +# "ip link set ... xdp obj" falha com "BTF is required, but is missing +# or corrupted" — foi exatamente esse erro que o pipeline antigo +# (emit-llvm sem -g, depois llc) causava. %.o: %.c - $(CLANG) -S \ + $(CLANG) -g -O2 \ -target bpf \ -D __BPF_TRACING__ \ -D__TARGET_ARCH_$(ARCH) \ -I/usr/include/$(MULTIARCH) \ -Wall \ - -O2 -emit-llvm -c -o $*.ll $< - $(LLC) -march=bpf -filetype=obj -o $@ $*.ll + -c -o $@ $< loader: loader.c $(CC) -Wall -o loader loader.c -l:libbpf.a -lelf -lz