On 12/12/2018 04:13 AM, Stanislav Fomichev wrote: > On 12/12, Daniel Borkmann wrote: >> On 12/11/2018 10:49 PM, Stanislav Fomichev wrote: >>> On 12/11, Stanislav Fomichev wrote: >>>> We're using bpf_htons in test_progs.c to initialize some static >>>> global data and I think I hit some weird case on an older compiler >>>> which doesn't have __builtin_bswap16 (and __builtin_constant_p >>>> expands to false). >>>> >>>> In this case I see: >>>> error: implicit declaration of function '__builtin_bswap16' >> >> Is that gcc < 4.8? > Yes. > >>>> Let's explicitly use __constant_htons which should be exposed by the >>>> linux/byteorder.h uapi header. >>> >>> Forgot to mention, that using simple htons produces the following: >>> test_progs.c:54:17: error: braced-group within expression allowed only >>> inside a function >>> .eth.h_proto = htons(ETH_P_IP), >>> >>>> Signed-off-by: Stanislav Fomichev <s...@google.com> >>>> --- >>>> tools/testing/selftests/bpf/test_progs.c | 8 ++++---- >>>> 1 file changed, 4 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/tools/testing/selftests/bpf/test_progs.c >>>> b/tools/testing/selftests/bpf/test_progs.c >>>> index 26f1fdf3e2bf..61593d319c0e 100644 >>>> --- a/tools/testing/selftests/bpf/test_progs.c >>>> +++ b/tools/testing/selftests/bpf/test_progs.c >>>> @@ -51,10 +51,10 @@ static struct { >>>> struct iphdr iph; >>>> struct tcphdr tcp; >>>> } __packed pkt_v4 = { >>>> - .eth.h_proto = bpf_htons(ETH_P_IP), >>>> + .eth.h_proto = __constant_htons(ETH_P_IP), >> >> If the __builtin_constant_p() evaluated to false on the constants (?), >> wouldn't using the __bpf_constant_htons() directly work as well given >> it's not using a builtin either? Should be fine either way though using >> the same api/header might be slightly nicer. > I got it wrong, __builtin_constant_p() evaluates correctly, I played > with it a bit. But for some reason it still complains about that branch > that it doesn't take :-/ > > Using __bpf_constant_htons() is a good idea, I'll follow up with a v2.
Ok, sounds good, thanks!