diff options
author | Jose E. Marchesi <jemarch@gcc.gnu.org> | 2019-09-09 12:13:23 +0200 |
---|---|---|
committer | Jose E. Marchesi <jemarch@gcc.gnu.org> | 2019-09-09 12:13:23 +0200 |
commit | 91dfef9610b8844c62dc7186a9aea9a6aca9805c (patch) | |
tree | 80d2a38518601f96538b807d34bcf187e9552460 /gcc/doc | |
parent | a5362c6aea5ea6b07803d8f9f6f783154e250ce4 (diff) | |
download | gcc-91dfef9610b8844c62dc7186a9aea9a6aca9805c.zip gcc-91dfef9610b8844c62dc7186a9aea9a6aca9805c.tar.gz gcc-91dfef9610b8844c62dc7186a9aea9a6aca9805c.tar.bz2 |
GCC port for eBPF
This patch series introduces a port of GCC to eBPF, which is a virtual
machine that resides in the Linux kernel. Initially intended for
user-level packet capture and filtering, eBPF is nowadays generalized
to serve as a general-purpose infrastructure also for non-networking
purposes.
The binutils support is already upstream. See
https://sourceware.org/ml/binutils/2019-05/msg00306.html.
ChangeLog:
* MAINTAINERS: Add myself as the maintainer of the eBPF port.
Remove myself from Write After Approval section.
* configure.ac: Support for bpf-*-* targets.
* configure: Regenerate.
contrib/ChangeLog:
* config-list.mk (LIST): Disable go in bpf-*-* targets.
gcc/ChangeLog:
* doc/invoke.texi (Option Summary): Cover eBPF.
(eBPF Options): New section.
* doc/extend.texi (BPF Built-in Functions): Likewise.
(BPF Kernel Helpers): Likewise.
* config.gcc: Support for bpf-*-* targets.
* common/config/bpf/bpf-common.c: New file.
* config/bpf/t-bpf: Likewise.
* config/bpf/predicates.md: Likewise.
* config/bpf/constraints.md: Likewise.
* config/bpf/bpf.opt: Likewise.
* config/bpf/bpf.md: Likewise.
* config/bpf/bpf.h: Likewise.
* config/bpf/bpf.c: Likewise.
* config/bpf/bpf-protos.h: Likewise.
* config/bpf/bpf-opts.h: Likewise.
* config/bpf/bpf-helpers.h: Likewise.
* config/bpf/bpf-helpers.def: Likewise.
gcc/testsuite/ChangeLog:
* gcc.dg/builtins-config.h: eBPF doesn't support C99 standard
functions.
* gcc.c-torture/compile/20101217-1.c: Add a function prototype for
printf.
* gcc.c-torture/compile/20000211-1.c: Skip if target bpf-*-*.
* gcc.c-torture/compile/poor.c: Likewise.
* gcc.c-torture/compile/pr25311.c: Likewise.
* gcc.c-torture/compile/pr39928-1.c: Likewise.
* gcc.c-torture/compile/pr70061.c: Likewise.
* gcc.c-torture/compile/920501-7.c: Likewise.
* gcc.c-torture/compile/20000403-1.c: Likewise.
* gcc.c-torture/compile/20001226-1.c: Likewise.
* gcc.c-torture/compile/20030903-1.c: Likewise.
* gcc.c-torture/compile/20031125-1.c: Likewise.
* gcc.c-torture/compile/20040101-1.c: Likewise.
* gcc.c-torture/compile/20040317-2.c: Likewise.
* gcc.c-torture/compile/20040726-1.c: Likewise.
* gcc.c-torture/compile/20051216-1.c: Likewise.
* gcc.c-torture/compile/900313-1.c: Likewise.
* gcc.c-torture/compile/920625-1.c: Likewise.
* gcc.c-torture/compile/930421-1.c: Likewise.
* gcc.c-torture/compile/930623-1.c: Likewise.
* gcc.c-torture/compile/961004-1.c: Likewise.
* gcc.c-torture/compile/980504-1.c: Likewise.
* gcc.c-torture/compile/980816-1.c: Likewise.
* gcc.c-torture/compile/990625-1.c: Likewise.
* gcc.c-torture/compile/DFcmp.c: Likewise.
* gcc.c-torture/compile/HIcmp.c: Likewise.
* gcc.c-torture/compile/HIset.c: Likewise.
* gcc.c-torture/compile/QIcmp.c: Likewise.
* gcc.c-torture/compile/QIset.c: Likewise.
* gcc.c-torture/compile/SFset.c: Likewise.
* gcc.c-torture/compile/SIcmp.c: Likewise.
* gcc.c-torture/compile/SIset.c: Likewise.
* gcc.c-torture/compile/UHIcmp.c: Likewise.
* gcc.c-torture/compile/UQIcmp.c: Likewise.
* gcc.c-torture/compile/USIcmp.c: Likewise.
* gcc.c-torture/compile/consec.c: Likewise.
* gcc.c-torture/compile/limits-fndefn.c: Likewise.
* gcc.c-torture/compile/lll.c: Likewise.
* gcc.c-torture/compile/parms.c: Likewise.
* gcc.c-torture/compile/pass.c: Likewise.
* gcc.c-torture/compile/pp.c: Likewise.
* gcc.c-torture/compile/pr32399.c: Likewise.
* gcc.c-torture/compile/pr34091.c: Likewise.
* gcc.c-torture/compile/pr34688.c: Likewise.
* gcc.c-torture/compile/pr37258.c: Likewise.
* gcc.c-torture/compile/pr37327.c: Likewise.
* gcc.c-torture/compile/pr37381.c: Likewise.
* gcc.c-torture/compile/pr37669-2.c: Likewise.
* gcc.c-torture/compile/pr37669.c: Likewise.
* gcc.c-torture/compile/pr37742-3.c: Likewise.
* gcc.c-torture/compile/pr44063.c: Likewise.
* gcc.c-torture/compile/pr48596.c: Likewise.
* gcc.c-torture/compile/pr51856.c: Likewise.
* gcc.c-torture/compile/pr54428.c: Likewise.
* gcc.c-torture/compile/pr54713-1.c: Likewise.
* gcc.c-torture/compile/pr54713-2.c: Likewise.
* gcc.c-torture/compile/pr54713-3.c: Likewise.
* gcc.c-torture/compile/pr55921.c: Likewise.
* gcc.c-torture/compile/pr70240.c: Likewise.
* gcc.c-torture/compile/pr70355.c: Likewise.
* gcc.c-torture/compile/pr82052.c: Likewise.
* gcc.c-torture/compile/pr83487.c: Likewise.
* gcc.c-torture/compile/pr86122.c: Likewise.
* gcc.c-torture/compile/pret-arg.c: Likewise.
* gcc.c-torture/compile/regs-arg-size.c: Likewise.
* gcc.c-torture/compile/structret.c: Likewise.
* gcc.c-torture/compile/uuarg.c: Likewise.
* gcc.dg/20001009-1.c: Likewise.
* gcc.dg/20020418-1.c: Likewise.
* gcc.dg/20020426-2.c: Likewise.
* gcc.dg/20020430-1.c: Likewise.
* gcc.dg/20040306-1.c: Likewise.
* gcc.dg/20040622-2.c: Likewise.
* gcc.dg/20050603-2.c: Likewise.
* gcc.dg/20050629-1.c: Likewise.
* gcc.dg/20061026.c: Likewise.
* gcc.dg/Warray-bounds-3.c: Likewise.
* gcc.dg/Warray-bounds-30.c: Likewise.
* gcc.dg/Wframe-larger-than-2.c: Likewise.
* gcc.dg/Wframe-larger-than.c: Likewise.
* gcc.dg/Wrestrict-11.c: Likewise.
* gcc.c-torture/compile/20000804-1.c: Likewise.
* lib/target-supports.exp (check_effective_target_trampolines):
Adapt to eBPF.
(check_effective_target_indirect_jumps): Likewise.
(check_effective_target_nonlocal_goto): Likewise.
(check_effective_target_global_constructor): Likewise.
(check_effective_target_return_address): Likewise.
* gcc.target/bpf/bpf.exp: New file.
* gcc.target/bpf/builtin-load.c: Likewise.
* cc.target/bpf/constant-calls.c: Likewise.
* gcc.target/bpf/diag-funargs.c: Likewise.
* gcc.target/bpf/diag-funargs-2.c: Likewise.
* gcc.target/bpf/diag-funargs-3.c: Likewise.
* gcc.target/bpf/diag-indcalls.c: Likewise.
* gcc.target/bpf/helper-bind.c: Likewise.
* gcc.target/bpf/helper-bpf-redirect.c: Likewise.
* gcc.target/bpf/helper-clone-redirect.c: Likewise.
* gcc.target/bpf/helper-csum-diff.c: Likewise.
* gcc.target/bpf/helper-csum-update.c: Likewise.
* gcc.target/bpf/helper-current-task-under-cgroup.c: Likewise.
* gcc.target/bpf/helper-fib-lookup.c: Likewise.
* gcc.target/bpf/helper-get-cgroup-classid.c: Likewise.
* gcc.target/bpf/helper-get-current-cgroup-id.c: Likewise.
* gcc.target/bpf/helper-get-current-comm.c: Likewise.
* gcc.target/bpf/helper-get-current-pid-tgid.c: Likewise.
* gcc.target/bpf/helper-get-current-task.c: Likewise.
* gcc.target/bpf/helper-get-current-uid-gid.c: Likewise.
* gcc.target/bpf/helper-get-hash-recalc.c: Likewise.
* gcc.target/bpf/helper-get-listener-sock.c: Likewise.
* gcc.target/bpf/helper-get-local-storage.c: Likewise.
* gcc.target/bpf/helper-get-numa-node-id.c: Likewise.
* gcc.target/bpf/helper-get-prandom-u32.c: Likewise.
* gcc.target/bpf/helper-get-route-realm.c: Likewise.
* gcc.target/bpf/helper-get-smp-processor-id.c: Likewise.
* gcc.target/bpf/helper-get-socket-cookie.c: Likewise.
* gcc.target/bpf/helper-get-socket-uid.c: Likewise.
* gcc.target/bpf/helper-getsockopt.c: Likewise.
* gcc.target/bpf/helper-get-stack.c: Likewise.
* gcc.target/bpf/helper-get-stackid.c: Likewise.
* gcc.target/bpf/helper-ktime-get-ns.c: Likewise.
* gcc.target/bpf/helper-l3-csum-replace.c: Likewise.
* gcc.target/bpf/helper-l4-csum-replace.c: Likewise.
* gcc.target/bpf/helper-lwt-push-encap.c: Likewise.
* gcc.target/bpf/helper-lwt-seg6-action.c: Likewise.
* gcc.target/bpf/helper-lwt-seg6-adjust-srh.c: Likewise.
* gcc.target/bpf/helper-lwt-seg6-store-bytes.c: Likewise.
* gcc.target/bpf/helper-map-delete-elem.c: Likewise.
* gcc.target/bpf/helper-map-lookup-elem.c: Likewise.
* gcc.target/bpf/helper-map-peek-elem.c: Likewise.
* gcc.target/bpf/helper-map-pop-elem.c: Likewise.
* gcc.target/bpf/helper-map-push-elem.c: Likewise.
* gcc.target/bpf/helper-map-update-elem.c: Likewise.
* gcc.target/bpf/helper-msg-apply-bytes.c: Likewise.
* gcc.target/bpf/helper-msg-cork-bytes.c: Likewise.
* gcc.target/bpf/helper-msg-pop-data.c: Likewise.
* gcc.target/bpf/helper-msg-pull-data.c: Likewise.
* gcc.target/bpf/helper-msg-push-data.c: Likewise.
* gcc.target/bpf/helper-msg-redirect-hash.c: Likewise.
* gcc.target/bpf/helper-msg-redirect-map.c: Likewise.
* gcc.target/bpf/helper-override-return.c: Likewise.
* gcc.target/bpf/helper-perf-event-output.c: Likewise.
* gcc.target/bpf/helper-perf-event-read.c: Likewise.
* gcc.target/bpf/helper-perf-event-read-value.c: Likewise.
* gcc.target/bpf/helper-perf-prog-read-value.c: Likewise.
* gcc.target/bpf/helper-probe-read.c: Likewise.
* gcc.target/bpf/helper-probe-read-str.c: Likewise.
* gcc.target/bpf/helper-probe-write-user.c: Likewise.
* gcc.target/bpf/helper-rc-keydown.c: Likewise.
* gcc.target/bpf/helper-rc-pointer-rel.c: Likewise.
* gcc.target/bpf/helper-rc-repeat.c: Likewise.
* gcc.target/bpf/helper-redirect-map.c: Likewise.
* gcc.target/bpf/helper-set-hash.c: Likewise.
* gcc.target/bpf/helper-set-hash-invalid.c: Likewise.
* gcc.target/bpf/helper-setsockopt.c: Likewise.
* gcc.target/bpf/helper-skb-adjust-room.c: Likewise.
* gcc.target/bpf/helper-skb-cgroup-id.c: Likewise.
* gcc.target/bpf/helper-skb-change-head.c: Likewise.
* gcc.target/bpf/helper-skb-change-proto.c: Likewise.
* gcc.target/bpf/helper-skb-change-tail.c: Likewise.
* gcc.target/bpf/helper-skb-change-type.c: Likewise.
* gcc.target/bpf/helper-skb-ecn-set-ce.c: Likewise.
* gcc.target/bpf/helper-skb-get-tunnel-key.c: Likewise.
* gcc.target/bpf/helper-skb-get-tunnel-opt.c: Likewise.
* gcc.target/bpf/helper-skb-get-xfrm-state.c: Likewise.
* gcc.target/bpf/helper-skb-load-bytes.c: Likewise.
* gcc.target/bpf/helper-skb-load-bytes-relative.c: Likewise.
* gcc.target/bpf/helper-skb-pull-data.c: Likewise.
* gcc.target/bpf/helper-skb-set-tunnel-key.c: Likewise.
* gcc.target/bpf/helper-skb-set-tunnel-opt.c: Likewise.
* gcc.target/bpf/helper-skb-store-bytes.c: Likewise.
* gcc.target/bpf/helper-skb-under-cgroup.c: Likewise.
* gcc.target/bpf/helper-skb-vlan-pop.c: Likewise.
* gcc.target/bpf/helper-skb-vlan-push.c: Likewise.
* gcc.target/bpf/helper-skc-lookup-tcp.c: Likewise.
* gcc.target/bpf/helper-sk-fullsock.c: Likewise.
* gcc.target/bpf/helper-sk-lookup-tcp.c: Likewise.
* gcc.target/bpf/helper-sk-lookup-upd.c: Likewise.
* gcc.target/bpf/helper-sk-redirect-hash.c: Likewise.
* gcc.target/bpf/helper-sk-redirect-map.c: Likewise.
* gcc.target/bpf/helper-sk-release.c: Likewise.
* gcc.target/bpf/helper-sk-select-reuseport.c: Likewise.
* gcc.target/bpf/helper-sk-storage-delete.c: Likewise.
* gcc.target/bpf/helper-sk-storage-get.c: Likewise.
* gcc.target/bpf/helper-sock-hash-update.c: Likewise.
* gcc.target/bpf/helper-sock-map-update.c: Likewise.
* gcc.target/bpf/helper-sock-ops-cb-flags-set.c: Likewise.
* gcc.target/bpf/helper-spin-lock.c: Likewise.
* gcc.target/bpf/helper-spin-unlock.c: Likewise.
* gcc.target/bpf/helper-strtol.c: Likewise.
* gcc.target/bpf/helper-strtoul.c: Likewise.
* gcc.target/bpf/helper-sysctl-get-current-value.c: Likewise.
* gcc.target/bpf/helper-sysctl-get-name.c: Likewise.
* gcc.target/bpf/helper-sysctl-get-new-value.c: Likewise.
* gcc.target/bpf/helper-sysctl-set-new-value.c: Likewise.
* gcc.target/bpf/helper-tail-call.c: Likewise.
* gcc.target/bpf/helper-tcp-check-syncookie.c: Likewise.
* gcc.target/bpf/helper-tcp-sock.c: Likewise.
* gcc.target/bpf/helper-trace-printk.c: Likewise.
* gcc.target/bpf/helper-xdp-adjust-head.c: Likewise.
* gcc.target/bpf/helper-xdp-adjust-meta.c: Likewise.
* gcc.target/bpf/helper-xdp-adjust-tail.c: Likewise.
* gcc.target/bpf/skb-ancestor-cgroup-id.c: Likewise.
* gcc.target/bpf/sync-fetch-and-add.c: Likewise.
libgcc/ChangeLog:
* config.host: Set cpu_type for bpf-*-* targets.
* config/bpf/t-bpf: Likewise.
* config/bpf/crtn.S: Likewise.
* config/bpf/crti.S: New file.
From-SVN: r275506
Diffstat (limited to 'gcc/doc')
-rw-r--r-- | gcc/doc/extend.texi | 171 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 37 |
2 files changed, 208 insertions, 0 deletions
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index a922f5c..64fccfe 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -13549,6 +13549,8 @@ instructions, but allow the compiler to schedule those calls. * ARM ARMv8-M Security Extensions:: * AVR Built-in Functions:: * Blackfin Built-in Functions:: +* BPF Built-in Functions:: +* BPF Kernel Helpers:: * FR-V Built-in Functions:: * MIPS DSP Built-in Functions:: * MIPS Paired-Single Support:: @@ -14545,6 +14547,175 @@ void __builtin_bfin_csync (void) void __builtin_bfin_ssync (void) @end smallexample +@node BPF Built-in Functions +@subsection BPF Built-in Functions + +The following built-in functions are available for eBPF targets. + +@deftypefn {Built-in Function} unsigned long long __builtin_bpf_load_byte (unsigned long long @var{offset}) +Load a byte from the @code{struct sk_buff} packet data pointed by the register @code{%r6} and return it. +@end deftypefn + +@deftypefn {Built-in Function} unsigned long long __builtin_bpf_load_half (unsigned long long @var{offset}) +Load 16-bits from the @code{struct sk_buff} packet data pointed by the register @code{%r6} and return it. +@end deftypefn + +@deftypefn {Built-in Function} unsigned long long __builtin_bpf_load_word (unsigned long long @var{offset}) +Load 32-bits from the @code{struct sk_buff} packet data pointed by the register @code{%r6} and return it. +@end deftypefn + +@node BPF Kernel Helpers +@subsection BPF Kernel Helpers + +These built-in functions are available for calling kernel helpers, and +they are available depending on the kernel version selected as the +CPU. + +Rather than using the built-ins directly, it is preferred for programs +to include @file{bpf-helpers.h} and use the wrappers defined there. + +For a full description of what the helpers do, the arguments they +take, and the returned value, see the +@file{linux/include/uapi/linux/bpf.h} in a Linux source tree. + +@smallexample +void *__builtin_bpf_helper_map_lookup_elem (void *map, void *key) +int __builtin_bpf_helper_map_update_elem (void *map, void *key, + void *value, + unsigned long long flags) +int __builtin_bpf_helper_map_delete_elem (void *map, const void *key) +int __builtin_bpf_helper_map_push_elem (void *map, const void *value, + unsigned long long flags) +int __builtin_bpf_helper_map_pop_elem (void *map, void *value) +int __builtin_bpf_helper_map_peek_elem (void *map, void *value) +int __builtin_bpf_helper_clone_redirect (void *skb, + unsigned int ifindex, + unsigned long long flags) +int __builtin_bpf_helper_skb_get_tunnel_key (void *ctx, void *key, int size, int flags) +int __builtin_bpf_helper_skb_set_tunnel_key (void *ctx, void *key, int size, int flags) +int __builtin_bpf_helper_skb_get_tunnel_opt (void *ctx, void *md, int size) +int __builtin_bpf_helper_skb_set_tunnel_opt (void *ctx, void *md, int size) +int __builtin_bpf_helper_skb_get_xfrm_state (void *ctx, int index, void *state, + int size, int flags) +static unsigned long long __builtin_bpf_helper_skb_cgroup_id (void *ctx) +static unsigned long long __builtin_bpf_helper_skb_ancestor_cgroup_id + (void *ctx, int level) +int __builtin_bpf_helper_skb_vlan_push (void *ctx, __be16 vlan_proto, __u16 vlan_tci) +int __builtin_bpf_helper_skb_vlan_pop (void *ctx) +int __builtin_bpf_helper_skb_ecn_set_ce (void *ctx) + +int __builtin_bpf_helper_skb_load_bytes (void *ctx, int off, void *to, int len) +int __builtin_bpf_helper_skb_load_bytes_relative (void *ctx, int off, void *to, int len, __u32 start_header) +int __builtin_bpf_helper_skb_store_bytes (void *ctx, int off, void *from, int len, int flags) +int __builtin_bpf_helper_skb_under_cgroup (void *ctx, void *map, int index) +int __builtin_bpf_helper_skb_change_head (void *, int len, int flags) +int __builtin_bpf_helper_skb_pull_data (void *, int len) +int __builtin_bpf_helper_skb_change_proto (void *ctx, __be16 proto, __u64 flags) +int __builtin_bpf_helper_skb_change_type (void *ctx, __u32 type) +int __builtin_bpf_helper_skb_change_tail (void *ctx, __u32 len, __u64 flags) +int __builtin_bpf_helper_skb_adjust_room (void *ctx, __s32 len_diff, __u32 mode, + unsigned long long flags) +@end smallexample + +Other helpers: + +@smallexample +int __builtin_bpf_helper_probe_read (void *dst, unsigned int size, void *src) +unsigned long long __builtin_bpf_helper_ktime_get_ns (void) +int __builtin_bpf_helper_trace_printk (const char *fmt, unsigned int fmt_size, ...) +void __builtin_bpf_helper_tail_call (void *ctx, void *prog_array_map, unsigned int index) +unsigned int __builtin_bpf_helper_get_smp_processor_id (void) +unsigned long long __builtin_bpf_helper_get_current_pid_tgid (void) +unsigned long long __builtin_bpf_helper_get_current_uid_gid (void) +int __builtin_bpf_helper_get_current_comm (void *buf, unsigned int size_of_buf) +unsigned long long __builtin_bpf_helper_perf_event_read (void *map, unsigned long long flags) + +int __builtin_bpf_helper_redirect (unsigned int ifindex, unsigned long long flags) +int __builtin_bpf_helper_redirect_map (void *map, unsigned int key, unsigned long long flags) +int __builtin_bpf_helper_perf_event_output (void *ctx,void *map, unsigned long long flags, void *data, unsigned long long size) +int __builtin_bpf_helper_get_stackid (void *ctx, void *map, unsigned long long flags) +int __builtin_bpf_helper_probe_write_user (void *dst, const void *src, unsigned int len) +int __builtin_bpf_helper_current_task_under_cgroup (void *map, unsigned int index) + +static unsigned long long __builtin_bpf_helper_get_prandom_u32 (void) +int __builtin_bpf_helper_xdp_adjust_head (void *ctx, int offset) +int __builtin_bpf_helper_xdp_adjust_meta (void *ctx, int offset) +int __builtin_bpf_helper_get_socket_cookie (void *ctx) +int __builtin_bpf_helper_setsockopt (void *ctx, int level, int optname, void *optval, + int optlen) +int __builtin_bpf_helper_getsockopt (void *ctx, int level, int optname, void *optval, + int optlen) +int __builtin_bpf_helper_sock_ops_cb_flags_set (void *ctx, int flags) +int __builtin_bpf_helper_sk_redirect_map (void *ctx, void *map, int key, int flags) +int __builtin_bpf_helper_sk_redirect_hash (void *ctx, void *map, void *key, int flags) +int __builtin_bpf_helper_sock_map_update (void *map, void *key, void *value, + unsigned long long flags) +int __builtin_bpf_helper_sock_hash_update (void *map, void *key, void *value, + unsigned long long flags) +int __builtin_bpf_helper_perf_event_read_value (void *map, unsigned long long flags, + void *buf, unsigned int buf_size) +int __builtin_bpf_helper_perf_prog_read_value (void *ctx, void *buf, + unsigned int buf_size) + +int __builtin_bpf_helper_override_return (void *ctx, unsigned long rc) +int __builtin_bpf_helper_msg_redirect_map (void *ctx, void *map, int key, int flags) +int __builtin_bpf_helper_msg_redirect_hash (void *ctx, + void *map, void *key, int flags) +int __builtin_bpf_helper_msg_apply_bytes (void *ctx, int len) +int __builtin_bpf_helper_msg_cork_bytes (void *ctx, int len) +int __builtin_bpf_helper_msg_pull_data (void *ctx, int start, int end, int flags) +int __builtin_bpf_helper_msg_push_data (void *ctx, int start, int end, int flags) +int __builtin_bpf_helper_msg_pop_data (void *ctx, int start, int cut, int flags) +int __builtin_bpf_helper_bind (void *ctx, void *addr, int addr_len) +int __builtin_bpf_helper_xdp_adjust_tail (void *ctx, int offset) +int __builtin_bpf_helper_sk_select_reuseport (void *ctx, void *map, void *key, __u32 flags) +int __builtin_bpf_helper_get_stack (void *ctx, void *buf, int size, int flags) +int __builtin_bpf_helper_fib_lookup (void *ctx, struct bpf_fib_lookup *params, + int plen, __u32 flags) + +int __builtin_bpf_helper_lwt_push_encap (void *ctx, unsigned int type, void *hdr, + unsigned int len) +int __builtin_bpf_helper_lwt_seg6_store_bytes (void *ctx, unsigned int offset, + void *from, unsigned int len) +int __builtin_bpf_helper_lwt_seg6_action (void *ctx, unsigned int action, void *param, + unsigned int param_len) +int __builtin_bpf_helper_lwt_seg6_adjust_srh (void *ctx, unsigned int offset, + unsigned int len) +int __builtin_bpf_helper_rc_repeat (void *ctx) +int __builtin_bpf_helper_rc_keydown (void *ctx, unsigned int protocol, + unsigned long long scancode, unsigned int toggle) +static unsigned long long __builtin_bpf_helper_get_current_cgroup_id (void) +static void *__builtin_bpf_helper_get_local_storage (void *map, unsigned long long flags) +static struct bpf_sock *__builtin_bpf_helper_sk_lookup_tcp (void *ctx, void *tuple, int size, unsigned long long netns_id, unsigned long long flags) +static struct bpf_sock *__builtin_bpf_helper_sk_lookup_udp (void *ctx, void *tuple, int size, unsigned long long netns_id, unsigned long long flags) +int __builtin_bpf_helper_sk_release (struct bpf_sock *sk) +int __builtin_bpf_helper_rc_pointer_rel (void *ctx, int rel_x, int rel_y) +static void __builtin_bpf_helper_spin_lock (struct bpf_spin_lock *lock) +static void __builtin_bpf_helper_spin_unlock (struct bpf_spin_lock *lock) + +static struct bpf_sock *__builtin_bpf_helper_sk_fullsock (struct bpf_sock *sk) +static struct bpf_tcp_sock *__builtin_bpf_helper_tcp_sock (struct bpf_sock *sk) +static struct bpf_sock *__builtin_bpf_helper_get_listener_sock (struct bpf_sock *sk) + +int __builtin_bpf_helper_l3_csum_replace (void *ctx, int off, int from, int to, int flags) +int __builtin_bpf_helper_l4_csum_replace (void *ctx, int off, int from, int to, int flags) +int __builtin_bpf_helper_csum_diff (void *from, int from_size, void *to, int to_size, int seed) + +static unsigned int __builtin_bpf_helper_get_cgroup_classid (void *ctx) +static unsigned int __builtin_bpf_helper_get_route_realm (void *ctx) +static unsigned int __builtin_bpf_helper_get_hash_recalc (void *ctx) +static unsigned long long __builtin_bpf_helper_get_current_task (void *ctx) + +static long long __builtin_bpf_helper_csum_update (void *ctx, __u32 csum) +static void __builtin_bpf_helper_set_hash_invalid (void *ctx) +int __builtin_bpf_helper_get_numa_node_id (void) +int __builtin_bpf_helper_probe_read_str (void *ctx, __u32 size, + const void *unsafe_ptr) +static unsigned int __builtin_bpf_helper_get_socket_uid (void *ctx) +static unsigned int __builtin_bpf_helper_set_hash (void *ctx, __u32 hash) +@end smallexample + + @node FR-V Built-in Functions @subsection FR-V Built-in Functions diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index bfcd76e..7bcdfcb 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -802,6 +802,10 @@ Objective-C and Objective-C++ Dialects}. -msmall-text -mlarge-text @gol -mmemory-latency=@var{time}} +@emph{eBPF Options} +@gccoptlist{-mbig-endian -mlittle-endian -mkernel=@var{version} +-mframe-limit=@var{bytes}} + @emph{FR30 Options} @gccoptlist{-msmall-model -mno-lsim} @@ -15650,6 +15654,7 @@ platform. * C-SKY Options:: * Darwin Options:: * DEC Alpha Options:: +* eBPF Options:: * FR30 Options:: * FT32 Options:: * FRV Options:: @@ -19771,6 +19776,38 @@ Note that L3 is only valid for EV5. @end table @end table +@node eBPF Options +@subsection eBPF Options +@cindex eBPF Options + +@table @gcctabopt +@item -mframe-limit=@var{bytes} +This specifies the hard limit for frame sizes, in bytes. Currently, +the value that can be specified should be less than or equal to +@samp{32767}. Defaults to whatever limit is imposed by the version of +the Linux kernel targeted. + +@item -mkernel=@var{version} +@opindex mkernel +This specifies the minimum version of the kernel that will run the +compiled program. GCC uses this version to determine which +instructions to use, what kernel helpers to allow, etc. Currently, +@var{version} can be one of @samp{4.0}, @samp{4.1}, @samp{4.2}, +@samp{4.3}, @samp{4.4}, @samp{4.5}, @samp{4.6}, @samp{4.7}, +@samp{4.8}, @samp{4.9}, @samp{4.10}, @samp{4.11}, @samp{4.12}, +@samp{4.13}, @samp{4.14}, @samp{4.15}, @samp{4.16}, @samp{4.17}, +@samp{4.18}, @samp{4.19}, @samp{4.20}, @samp{5.0}, @samp{5.1}, +@samp{5.2}, @samp{latest} and @samp{native}. + +@item -mbig-endian +@opindex mbig-endian +Generate code for a big-endian target. + +@item -mlittle-endian +@opindex mlittle-endian +Generate code for a little-endian target. This is the default. +@end table + @node FR30 Options @subsection FR30 Options @cindex FR30 Options |