Oleksandr Natalenko writes: > Hi. > > On 07.05.2019 00:01, Jiong Wang wrote: >> I guess it's because constant prop. Could you try the following change >> to >> __emit_shift? >> >> drivers/net/ethernet/netronome/nfp/bpf/jit.c >> __emit_shift:331 >> - if (sc == SHF_SC_L_SHF) >> + if (sc == SHF_SC_L_SHF && shift) >> shift = 32 - shift; >> >> emit_shf_indir is passing "0" as shift to __emit_shift which will >> eventually be turned into 32 and it was OK because we truncate to >> 5-bit, >> but before truncation, it will overflow the shift mask. > > Yup, it silences the error for me. Thanks for the testing. I have also reproduced this issue after switching to gcc 8.3, and confirmed the error is triggered from "value too large for the field" check inside __BF_FIELD_CHECK due to immediate "32" is out of range for mask 0x1f. Will send out a fix. Regards, Jiong