From: Jesper Dangaard Brouer <brouer@redhat.com>
To: Eric Leblond <eric@regit.org>
Cc: victor@inliniac.net, netdev@vger.kernel.org, yhs@fb.com,
Daniel Borkmann <borkmann@iogearbox.net>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
brouer@redhat.com
Subject: Re: [suricata PATCH 1/3] suricata/ebpf: take clang -target bpf include issue of stdint.h into account
Date: Thu, 8 Feb 2018 09:42:52 +0100 [thread overview]
Message-ID: <20180208094252.20267ecb@redhat.com> (raw)
In-Reply-To: <1518047529.18958.16.camel@regit.org>
On Thu, 08 Feb 2018 00:52:09 +0100 Eric Leblond <eric@regit.org> wrote:
> Hi,
>
> On Wed, 2018-02-07 at 23:21 +0100, Jesper Dangaard Brouer wrote:
> > From: Jesper Dangaard Brouer <netoptimizer@brouer.com>
> >
> > This patch prepares code before enabling the clang -target bpf.
> >
> > The clang compiler does not like #include <stdint.h> when
> > using '-target bpf' it will fail with:
> >
> > fatal error: 'gnu/stubs-32.h' file not found
> ...
> > This can be worked around by installing the 32-bit version of
> > glibc-devel.i686 on your distribution.
> >
> > But the BPF programs does not really need to include stdint.h,
> > if converting:
> > uint64_t -> __u64
> > uint32_t -> __u32
> > uint16_t -> __u16
> > uint8_t -> __u8
> >
> > This patch does this type syntax conversion.
>
> There is an issue for system like Debian because they don't have a
> asm/types.h in the include path if the architecture is not defined
> which is the case due to target bpf. This results in:
>
> clang-5.0 -Wall -Iinclude -O2 \
> -D__KERNEL__ -D__ASM_SYSREG_H \
> -target bpf -S -emit-llvm vlan_filter.c -o vlan_filter.ll
> In file included from vlan_filter.c:19:
> In file included from include/linux/bpf.h:11:
> /usr/include/linux/types.h:5:10: fatal error: 'asm/types.h' file not
> found
> #include <asm/types.h>
> ^~~~~~~~~~~~~
> 1 error generated.
> Makefile:523: recipe for target 'vlan_filter.bpf' failed
>
> To go into details, the Debian package providing the 'asm/typs.h'
> include is the the headers or linux-libc-dev. But this package comes
> with a flavor and thus we have a prefix:
> linux-libc-dev:amd64: /usr/include/x86_64-linux-gnu/asm/types.h
Oh, the joy of distro choices.
> "Fun" part here is that if you build a debian package of the via make
> in Linux tree then the linux-libc-dev package is correct.
>
> So I propose the following patch that fixes the issue for me:
>
> diff --git a/ebpf/Makefile.am b/ebpf/Makefile.am
> index 89a3304e9..712b05343 100644
> --- a/ebpf/Makefile.am
> +++ b/ebpf/Makefile.am
> @@ -16,6 +16,7 @@ all: $(BPF_TARGETS)
> $(BPF_TARGETS): %.bpf: %.c
> # From C-code to LLVM-IR format suffix .ll (clang -S -emit-llvm)
> ${CLANG} -Wall $(BPF_CFLAGS) -O2 \
> + -I/usr/include/$(host_cpu)-$(host_os)/ \
Cool solution. These variables originate from configure/automake.
Would it be more technical correct to use(?): $(build_cpu)-$(build_os)
I verified that the variables are the same (notice 'make -p' trick):
$ make -p | egrep '_os'
build_os = linux-gnu
host_os = linux-gnu
$ make -p | egrep '_cpu'
host_cpu = x86_64
build_cpu = x86_64
> -D__KERNEL__ -D__ASM_SYSREG_H \
> -target bpf -S -emit-llvm $< -o ${@:.bpf=.ll}
> # From LLVM-IR to BPF-bytecode in ELF-obj file
>
> Let me know if it is ok for you.
I'm fine with this fix.
I wonder if we should check other distros?
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
next prev parent reply other threads:[~2018-02-08 8:42 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-06 14:54 [bpf-next V2 PATCH 0/5] tools/libbpf improvements and selftests Jesper Dangaard Brouer
2018-02-06 14:54 ` [bpf-next V2 PATCH 1/5] bpf: Sync kernel ABI header with tooling header for bpf_common.h Jesper Dangaard Brouer
2018-02-06 14:54 ` [bpf-next V2 PATCH 2/5] tools/libbpf: improve the pr_debug statements to contain section numbers Jesper Dangaard Brouer
2018-02-06 14:54 ` [bpf-next V2 PATCH 3/5] selftests/bpf: add test program for loading BPF ELF files Jesper Dangaard Brouer
2018-02-06 14:54 ` [bpf-next V2 PATCH 4/5] selftests/bpf: add selftest that use test_libbpf_open Jesper Dangaard Brouer
2018-02-06 14:54 ` [bpf-next V2 PATCH 5/5] tools/libbpf: handle issues with bpf ELF objects containing .eh_frames Jesper Dangaard Brouer
2018-02-06 16:00 ` Alexei Starovoitov
2018-02-06 17:03 ` Jesper Dangaard Brouer
2018-02-06 19:05 ` Daniel Borkmann
2018-02-07 12:40 ` Jesper Dangaard Brouer
2018-02-07 13:19 ` Daniel Borkmann
2018-02-07 14:58 ` Jesper Dangaard Brouer
2018-02-07 16:18 ` Daniel Borkmann
2018-02-07 22:21 ` [suricata PATCH 0/3] Suricata cleanup makefile Jesper Dangaard Brouer
2018-02-07 22:21 ` [suricata PATCH 1/3] suricata/ebpf: take clang -target bpf include issue of stdint.h into account Jesper Dangaard Brouer
2018-02-07 23:52 ` Eric Leblond
2018-02-08 8:42 ` Jesper Dangaard Brouer [this message]
2018-02-07 22:21 ` [suricata PATCH 2/3] suricata/ebpf: compile with clang -target bpf Jesper Dangaard Brouer
2018-02-07 22:21 ` [suricata PATCH 3/3] suricata/ebpf: improving the ebpf makefile Jesper Dangaard Brouer
2018-02-07 22:38 ` [suricata PATCH 0/3] Suricata cleanup makefile Eric Leblond
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180208094252.20267ecb@redhat.com \
--to=brouer@redhat.com \
--cc=alexei.starovoitov@gmail.com \
--cc=borkmann@iogearbox.net \
--cc=eric@regit.org \
--cc=netdev@vger.kernel.org \
--cc=victor@inliniac.net \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.