diff --git a/.github/scripts/download_kernel_images.sh b/.github/scripts/download_kernel_images.sh index da827460..eab4e8a3 100755 --- a/.github/scripts/download_kernel_images.sh +++ b/.github/scripts/download_kernel_images.sh @@ -25,6 +25,25 @@ for VERSION in "${VERSIONS[@]}"; do exit 1 } FILES+=("$match") + + # The debug package contains the actual System.map. Debian has transitioned + # between -dbg and -dbgsym suffixes, so match either for the specific kernel + # we just selected. + kernel_basename=$(basename "$match") + kernel_prefix=${kernel_basename%%_*} + kernel_suffix=${kernel_basename#${kernel_prefix}_} + base_prefix=${kernel_prefix%-unsigned} + + base_prefix_regex=$(printf '%s\n' "$base_prefix" | sed 's/[][(){}.^$*+?|\\-]/\\&/g') + kernel_suffix_regex=$(printf '%s\n' "$kernel_suffix" | sed 's/[][(){}.^$*+?|\\-]/\\&/g') + + DEBUG_REGEX="${base_prefix_regex}-dbg(sym)?_${kernel_suffix_regex}" + debug_match=$(printf '%s\n' "$URLS" | grep -E "$DEBUG_REGEX" | sort -V | tail -n1) || { + printf 'Failed to locate debug package matching %s\n%s\nVERSION=%s\nREGEX=%s\n' \ + "$kernel_basename" "$URLS" "$VERSION" "$DEBUG_REGEX" >&2 + exit 1 + } + FILES+=("$debug_match") done # Note: `--etag-{compare,save}` are not idempotent until curl 8.9.0 which included diff --git a/aya-obj/include/linux_wrapper.h b/aya-obj/include/linux_wrapper.h index fe9498f8..7bb1e679 100644 --- a/aya-obj/include/linux_wrapper.h +++ b/aya-obj/include/linux_wrapper.h @@ -1,9 +1,10 @@ #include #include +#include #include #include #include #include #include #include -#include +#include \ No newline at end of file diff --git a/aya-obj/src/generated/linux_bindings_aarch64.rs b/aya-obj/src/generated/linux_bindings_aarch64.rs index b76ed850..aff50e13 100644 --- a/aya-obj/src/generated/linux_bindings_aarch64.rs +++ b/aya-obj/src/generated/linux_bindings_aarch64.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya-obj/src/generated/linux_bindings_armv7.rs b/aya-obj/src/generated/linux_bindings_armv7.rs index 08b3a162..ae0a1da4 100644 --- a/aya-obj/src/generated/linux_bindings_armv7.rs +++ b/aya-obj/src/generated/linux_bindings_armv7.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya-obj/src/generated/linux_bindings_loongarch64.rs b/aya-obj/src/generated/linux_bindings_loongarch64.rs index b76ed850..aff50e13 100644 --- a/aya-obj/src/generated/linux_bindings_loongarch64.rs +++ b/aya-obj/src/generated/linux_bindings_loongarch64.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya-obj/src/generated/linux_bindings_mips.rs b/aya-obj/src/generated/linux_bindings_mips.rs index 349653d7..f3ae9b95 100644 --- a/aya-obj/src/generated/linux_bindings_mips.rs +++ b/aya-obj/src/generated/linux_bindings_mips.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya-obj/src/generated/linux_bindings_powerpc64.rs b/aya-obj/src/generated/linux_bindings_powerpc64.rs index 50d01b86..7d8294f7 100644 --- a/aya-obj/src/generated/linux_bindings_powerpc64.rs +++ b/aya-obj/src/generated/linux_bindings_powerpc64.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya-obj/src/generated/linux_bindings_riscv64.rs b/aya-obj/src/generated/linux_bindings_riscv64.rs index b76ed850..aff50e13 100644 --- a/aya-obj/src/generated/linux_bindings_riscv64.rs +++ b/aya-obj/src/generated/linux_bindings_riscv64.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya-obj/src/generated/linux_bindings_s390x.rs b/aya-obj/src/generated/linux_bindings_s390x.rs index b76ed850..aff50e13 100644 --- a/aya-obj/src/generated/linux_bindings_s390x.rs +++ b/aya-obj/src/generated/linux_bindings_s390x.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya-obj/src/generated/linux_bindings_x86_64.rs b/aya-obj/src/generated/linux_bindings_x86_64.rs index b76ed850..aff50e13 100644 --- a/aya-obj/src/generated/linux_bindings_x86_64.rs +++ b/aya-obj/src/generated/linux_bindings_x86_64.rs @@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo { pub struct btf_decl_tag { pub component_idx: __s32, } +pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1; +pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2; +pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3; +pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4; +pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5; +pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6; +pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7; +pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8; +pub type _bindgen_ty_44 = ::core::ffi::c_uint; +pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0; +pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1; +pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2; +pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3; +pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4; +pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7; +pub type _bindgen_ty_45 = ::core::ffi::c_uint; impl nlmsgerr_attrs { pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE; } @@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs { NLMSGERR_ATTR_COOKIE = 3, __NLMSGERR_ATTR_MAX = 4, } -pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0; -pub const IFLA_XDP_FD: _bindgen_ty_92 = 1; -pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2; -pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3; -pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4; -pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5; -pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6; -pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7; -pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8; -pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9; -pub type _bindgen_ty_92 = ::core::ffi::c_uint; +pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0; +pub const IFLA_XDP_FD: _bindgen_ty_94 = 1; +pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2; +pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3; +pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4; +pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5; +pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6; +pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7; +pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8; +pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9; +pub type _bindgen_ty_94 = ::core::ffi::c_uint; impl nf_inet_hooks { pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS; } @@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks { NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, } -pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0; -pub const NFPROTO_INET: _bindgen_ty_99 = 1; -pub const NFPROTO_IPV4: _bindgen_ty_99 = 2; -pub const NFPROTO_ARP: _bindgen_ty_99 = 3; -pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5; -pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7; -pub const NFPROTO_IPV6: _bindgen_ty_99 = 10; -pub const NFPROTO_DECNET: _bindgen_ty_99 = 12; -pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13; -pub type _bindgen_ty_99 = ::core::ffi::c_uint; +pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0; +pub const NFPROTO_INET: _bindgen_ty_101 = 1; +pub const NFPROTO_IPV4: _bindgen_ty_101 = 2; +pub const NFPROTO_ARP: _bindgen_ty_101 = 3; +pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5; +pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7; +pub const NFPROTO_IPV6: _bindgen_ty_101 = 10; +pub const NFPROTO_DECNET: _bindgen_ty_101 = 12; +pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13; +pub type _bindgen_ty_101 = ::core::ffi::c_uint; #[repr(u32)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub enum perf_type_id { @@ -4111,20 +4127,20 @@ pub enum perf_event_type { PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, } -pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0; -pub const TCA_BPF_ACT: _bindgen_ty_154 = 1; -pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2; -pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3; -pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4; -pub const TCA_BPF_OPS: _bindgen_ty_154 = 5; -pub const TCA_BPF_FD: _bindgen_ty_154 = 6; -pub const TCA_BPF_NAME: _bindgen_ty_154 = 7; -pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8; -pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9; -pub const TCA_BPF_TAG: _bindgen_ty_154 = 10; -pub const TCA_BPF_ID: _bindgen_ty_154 = 11; -pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12; -pub type _bindgen_ty_154 = ::core::ffi::c_uint; +pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0; +pub const TCA_BPF_ACT: _bindgen_ty_156 = 1; +pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2; +pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3; +pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4; +pub const TCA_BPF_OPS: _bindgen_ty_156 = 5; +pub const TCA_BPF_FD: _bindgen_ty_156 = 6; +pub const TCA_BPF_NAME: _bindgen_ty_156 = 7; +pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8; +pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9; +pub const TCA_BPF_TAG: _bindgen_ty_156 = 10; +pub const TCA_BPF_ID: _bindgen_ty_156 = 11; +pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12; +pub type _bindgen_ty_156 = ::core::ffi::c_uint; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct ifinfomsg { @@ -4146,22 +4162,22 @@ pub struct tcmsg { pub tcm_parent: __u32, pub tcm_info: __u32, } -pub const TCA_UNSPEC: _bindgen_ty_174 = 0; -pub const TCA_KIND: _bindgen_ty_174 = 1; -pub const TCA_OPTIONS: _bindgen_ty_174 = 2; -pub const TCA_STATS: _bindgen_ty_174 = 3; -pub const TCA_XSTATS: _bindgen_ty_174 = 4; -pub const TCA_RATE: _bindgen_ty_174 = 5; -pub const TCA_FCNT: _bindgen_ty_174 = 6; -pub const TCA_STATS2: _bindgen_ty_174 = 7; -pub const TCA_STAB: _bindgen_ty_174 = 8; -pub const TCA_PAD: _bindgen_ty_174 = 9; -pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10; -pub const TCA_CHAIN: _bindgen_ty_174 = 11; -pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12; -pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13; -pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14; -pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15; -pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16; -pub const __TCA_MAX: _bindgen_ty_174 = 17; -pub type _bindgen_ty_174 = ::core::ffi::c_uint; +pub const TCA_UNSPEC: _bindgen_ty_176 = 0; +pub const TCA_KIND: _bindgen_ty_176 = 1; +pub const TCA_OPTIONS: _bindgen_ty_176 = 2; +pub const TCA_STATS: _bindgen_ty_176 = 3; +pub const TCA_XSTATS: _bindgen_ty_176 = 4; +pub const TCA_RATE: _bindgen_ty_176 = 5; +pub const TCA_FCNT: _bindgen_ty_176 = 6; +pub const TCA_STATS2: _bindgen_ty_176 = 7; +pub const TCA_STAB: _bindgen_ty_176 = 8; +pub const TCA_PAD: _bindgen_ty_176 = 9; +pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10; +pub const TCA_CHAIN: _bindgen_ty_176 = 11; +pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12; +pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13; +pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14; +pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15; +pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16; +pub const __TCA_MAX: _bindgen_ty_176 = 17; +pub type _bindgen_ty_176 = ::core::ffi::c_uint; diff --git a/aya/src/programs/perf_event.rs b/aya/src/programs/perf_event.rs index 93d3dfe1..2e2160b3 100644 --- a/aya/src/programs/perf_event.rs +++ b/aya/src/programs/perf_event.rs @@ -3,6 +3,7 @@ use std::os::fd::AsFd as _; use aya_obj::generated::{ + HW_BREAKPOINT_LEN_1, HW_BREAKPOINT_LEN_2, HW_BREAKPOINT_LEN_4, HW_BREAKPOINT_LEN_8, bpf_link_type, bpf_prog_type::BPF_PROG_TYPE_PERF_EVENT, perf_hw_cache_id, perf_hw_cache_op_id, perf_hw_cache_op_result_id, perf_hw_id, perf_sw_ids, @@ -17,8 +18,8 @@ use crate::{ programs::{ FdLink, LinkError, ProgramData, ProgramError, ProgramType, impl_try_into_fdlink, links::define_link_wrapper, - load_program, perf_attach, - perf_attach::{PerfLinkIdInner, PerfLinkInner}, + load_program, + perf_attach::{PerfLinkIdInner, PerfLinkInner, perf_attach}, }, sys::{SyscallError, bpf_link_get_info_by_fd, perf_event_open}, }; @@ -58,12 +59,8 @@ pub enum PerfEventConfig { event_id: u64, }, /// A hardware breakpoint. - /// - /// Note: this variant is not fully implemented at the moment. - // TODO: Variant not fully implemented due to additional `perf_event_attr` fields like - // `bp_type`, `bp_addr`, etc. #[doc(alias = "PERF_TYPE_BREAKPOINT")] - Breakpoint, + Breakpoint(BreakpointConfig), /// The dynamic PMU (Performance Monitor Unit) event to report. /// /// Available PMU's may be found under `/sys/bus/event_source/devices`. @@ -282,6 +279,85 @@ impl HwCacheResult { } } +/// Type of hardware breakpoint, determines if we break on read, write, or +/// execute, or if there should be no breakpoint on the given address. +#[derive(Debug, Clone, Copy)] +pub enum BreakpointConfig { + /// HW_BREAKPOINT_EMPTY, no breakpoint. + #[doc(alias = "HW_BREAKPOINT_EMPTY")] + Empty { + /// The size of the breakpoint being measured. + size: PerfBreakpointSize, + /// The address of the breakpoint. + address: u64, + }, + /// HW_BREAKPOINT_R, count when we read the memory location. + #[doc(alias = "HW_BREAKPOINT_R")] + Read { + /// The size of the breakpoint being measured. + size: PerfBreakpointSize, + /// The address of the breakpoint. + address: u64, + }, + /// HW_BREAKPOINT_W, count when we write the memory location. + #[doc(alias = "HW_BREAKPOINT_W")] + Write { + /// The size of the breakpoint being measured. + size: PerfBreakpointSize, + /// The address of the breakpoint. + address: u64, + }, + /// HW_BREAKPOINT_RW, count when we read or write the memory location. + #[doc(alias = "HW_BREAKPOINT_RW")] + ReadWrite { + /// The size of the breakpoint being measured. + size: PerfBreakpointSize, + /// The address of the breakpoint. + address: u64, + }, + /// HW_BREAKPOINT_X, count when we execute code at the memory location. + #[doc(alias = "HW_BREAKPOINT_X")] + Execute { + /// The address of the breakpoint. + address: u64, + }, +} + +/// The size of the breakpoint being observed in bytes. +#[repr(u64)] +#[derive(Debug, Clone, Copy)] +pub enum PerfBreakpointSize { + /// HW_BREAKPOINT_LEN_1 + #[doc(alias = "HW_BREAKPOINT_LEN_1")] + HwBreakpointLen1 = HW_BREAKPOINT_LEN_1 as u64, + /// HW_BREAKPOINT_LEN_2 + #[doc(alias = "HW_BREAKPOINT_LEN_2")] + HwBreakpointLen2 = HW_BREAKPOINT_LEN_2 as u64, + /// HW_BREAKPOINT_LEN_4 + #[doc(alias = "HW_BREAKPOINT_LEN_4")] + HwBreakpointLen4 = HW_BREAKPOINT_LEN_4 as u64, + /// HW_BREAKPOINT_LEN_8 + #[doc(alias = "HW_BREAKPOINT_LEN_8")] + HwBreakpointLen8 = HW_BREAKPOINT_LEN_8 as u64, +} + +impl PerfBreakpointSize { + pub(crate) const fn into_primitive(self) -> u64 { + const _: [(); 8] = [(); std::mem::size_of::()]; + self as u64 + } + + pub(crate) const fn from_primitive(size: u64) -> Self { + match size { + n if n == Self::HwBreakpointLen1.into_primitive() => Self::HwBreakpointLen1, + n if n == Self::HwBreakpointLen2.into_primitive() => Self::HwBreakpointLen2, + n if n == Self::HwBreakpointLen4.into_primitive() => Self::HwBreakpointLen4, + n if n == Self::HwBreakpointLen8.into_primitive() => Self::HwBreakpointLen8, + _ => panic!("invalid hardware breakpoint size"), + } + } +} + /// Sample Policy #[derive(Debug, Clone)] pub enum SamplePolicy { @@ -379,16 +455,17 @@ impl PerfEvent { /// Attaches to the given perf event. /// - /// [`perf_type`](PerfEventConfig) defines the event `type` and `config` of interest. + /// [`perf_config`](PerfEventConfig) defines the event `type` and `config` of + /// interest. /// - /// [`scope`](PerfEventScope) determines which processes are sampled. If `inherit` is - /// `true`, any new processes spawned by those processes will also automatically be - /// sampled. + /// [`scope`](PerfEventScope) determines which processes are sampled. If + /// `inherit` is `true`, any new processes spawned by those processes will + /// also automatically be sampled. /// /// The returned value can be used to detach, see [PerfEvent::detach]. pub fn attach( &mut self, - perf_type: PerfEventConfig, + perf_config: PerfEventConfig, scope: PerfEventScope, sample_policy: SamplePolicy, inherit: bool, @@ -396,7 +473,8 @@ impl PerfEvent { let prog_fd = self.fd()?; let prog_fd = prog_fd.as_fd(); - let (perf_type, config) = match perf_type { + let mut breakpoint = None; + let (perf_type, config) = match perf_config { PerfEventConfig::Pmu { pmu_type, config } => (pmu_type, config), PerfEventConfig::Hardware(hw_event) => ( perf_type_id_to_u32(PERF_TYPE_HARDWARE), @@ -420,7 +498,10 @@ impl PerfEvent { | (u64::from(result.into_primitive()) << 16), ), PerfEventConfig::Raw { event_id } => (perf_type_id_to_u32(PERF_TYPE_RAW), event_id), - PerfEventConfig::Breakpoint => (perf_type_id_to_u32(PERF_TYPE_BREAKPOINT), 0), + PerfEventConfig::Breakpoint(config) => { + breakpoint = Some(config); + (perf_type_id_to_u32(PERF_TYPE_BREAKPOINT), 0) + } }; let (sample_period, sample_frequency) = match sample_policy { SamplePolicy::Period(period) => (period, None), @@ -440,9 +521,9 @@ impl PerfEvent { cpu, sample_period, sample_frequency, - false, inherit, 0, + breakpoint, ) .map_err(|io_error| SyscallError { call: "perf_event_open", diff --git a/aya/src/sys/perf_event.rs b/aya/src/sys/perf_event.rs index afedefa9..b907f6aa 100644 --- a/aya/src/sys/perf_event.rs +++ b/aya/src/sys/perf_event.rs @@ -5,6 +5,7 @@ use std::{ }; use aya_obj::generated::{ + HW_BREAKPOINT_EMPTY, HW_BREAKPOINT_R, HW_BREAKPOINT_RW, HW_BREAKPOINT_W, HW_BREAKPOINT_X, PERF_FLAG_FD_CLOEXEC, perf_event_attr, perf_event_sample_format::PERF_SAMPLE_RAW, perf_sw_ids::PERF_COUNT_SW_BPF_OUTPUT, @@ -13,6 +14,7 @@ use aya_obj::generated::{ use libc::pid_t; use super::{PerfEventIoctlRequest, Syscall, syscall}; +use crate::programs::perf_event::{BreakpointConfig, PerfBreakpointSize}; #[expect(clippy::too_many_arguments)] pub(crate) fn perf_event_open( @@ -22,9 +24,9 @@ pub(crate) fn perf_event_open( cpu: c_int, sample_period: u64, sample_frequency: Option, - wakeup: bool, inherit: bool, flags: u32, + breakpoint: Option, ) -> io::Result { let mut attr = unsafe { mem::zeroed::() }; @@ -33,7 +35,6 @@ pub(crate) fn perf_event_open( attr.type_ = perf_type; attr.sample_type = PERF_SAMPLE_RAW as u64; attr.set_inherit(if inherit { 1 } else { 0 }); - attr.__bindgen_anon_2.wakeup_events = u32::from(wakeup); if let Some(frequency) = sample_frequency { attr.set_freq(1); @@ -42,6 +43,27 @@ pub(crate) fn perf_event_open( attr.__bindgen_anon_1.sample_period = sample_period; } + if let Some(bp) = breakpoint { + let (type_, length, address) = match bp { + BreakpointConfig::Empty { size, address } => (HW_BREAKPOINT_EMPTY, size, address), + BreakpointConfig::Read { size, address } => (HW_BREAKPOINT_R, size, address), + BreakpointConfig::Write { size, address } => (HW_BREAKPOINT_W, size, address), + BreakpointConfig::ReadWrite { size, address } => (HW_BREAKPOINT_RW, size, address), + BreakpointConfig::Execute { address } => ( + HW_BREAKPOINT_X, + PerfBreakpointSize::from_primitive(std::mem::size_of::() as u64), + address, + ), + }; + attr.bp_type = type_; + attr.__bindgen_anon_3.bp_addr = address; + attr.__bindgen_anon_4.bp_len = length.into_primitive(); + attr.set_precise_ip(2); + attr.__bindgen_anon_2.wakeup_events = u32::from(true); + } else { + attr.__bindgen_anon_2.wakeup_events = u32::from(false); + } + perf_event_sys(attr, pid, cpu, flags) } @@ -54,8 +76,8 @@ pub(crate) fn perf_event_open_bpf(cpu: c_int) -> io::Result { 1, None, true, - false, PERF_FLAG_FD_CLOEXEC, + None, ) } diff --git a/ebpf/aya-ebpf-bindings/include/bindings.h b/ebpf/aya-ebpf-bindings/include/bindings.h index aa831c57..ba2f9183 100644 --- a/ebpf/aya-ebpf-bindings/include/bindings.h +++ b/ebpf/aya-ebpf-bindings/include/bindings.h @@ -6,6 +6,7 @@ typedef __u32 __bitwise __wsum; #include #include +#include // needed for TC_ACT_* #include #include diff --git a/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs b/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs index 87ef0587..473db3c6 100644 --- a/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/aarch64/bindings.rs @@ -365,11 +365,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -2887,6 +2882,14 @@ pub struct user_pt_regs { pub pc: __u64, pub pstate: __u64, } +pub type bpf_user_pt_regs_t = user_pt_regs; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs b/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs index 54140c49..50c1d6f7 100644 --- a/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/armv7/bindings.rs @@ -365,11 +365,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -2896,6 +2891,14 @@ pub struct bpf_iter_num { pub struct pt_regs { pub uregs: [::aya_ebpf_cty::c_long; 18usize], } +pub type bpf_user_pt_regs_t = pt_regs; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf-bindings/src/loongarch64/bindings.rs b/ebpf/aya-ebpf-bindings/src/loongarch64/bindings.rs index f769d7b9..4ffb76ce 100644 --- a/ebpf/aya-ebpf-bindings/src/loongarch64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/loongarch64/bindings.rs @@ -365,11 +365,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -2888,6 +2883,14 @@ pub struct user_pt_regs { pub csr_badv: ::aya_ebpf_cty::c_ulong, pub reserved: [::aya_ebpf_cty::c_ulong; 10usize], } +pub type bpf_user_pt_regs_t = user_pt_regs; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf-bindings/src/mips/bindings.rs b/ebpf/aya-ebpf-bindings/src/mips/bindings.rs index 65333c5c..1bacaa53 100644 --- a/ebpf/aya-ebpf-bindings/src/mips/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/mips/bindings.rs @@ -366,11 +366,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -2903,6 +2898,14 @@ pub struct pt_regs { pub cp0_status: __u64, pub cp0_cause: __u64, } +pub type bpf_user_pt_regs_t = pt_regs; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs b/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs index bc1388bf..7e46bcb7 100644 --- a/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/powerpc64/bindings.rs @@ -365,11 +365,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -2891,6 +2886,14 @@ pub struct pt_regs { pub dsisr: ::aya_ebpf_cty::c_ulong, pub result: ::aya_ebpf_cty::c_ulong, } +pub type bpf_user_pt_regs_t = pt_regs; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs b/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs index 98b85819..c90a7d2a 100644 --- a/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/riscv64/bindings.rs @@ -365,11 +365,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -2915,6 +2910,14 @@ pub struct user_regs_struct { pub t5: ::aya_ebpf_cty::c_ulong, pub t6: ::aya_ebpf_cty::c_ulong, } +pub type bpf_user_pt_regs_t = user_regs_struct; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs b/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs index 15804301..015cafe7 100644 --- a/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/s390x/bindings.rs @@ -365,11 +365,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -3848,6 +3843,14 @@ pub struct user_regs_struct { pub per_info: per_struct, pub ieee_instruction_pointer: ::aya_ebpf_cty::c_ulong, } +pub type bpf_user_pt_regs_t = user_pt_regs; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs b/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs index 89fec488..72c24b75 100644 --- a/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs +++ b/ebpf/aya-ebpf-bindings/src/x86_64/bindings.rs @@ -365,11 +365,6 @@ pub type __be32 = __u32; pub type __wsum = __u32; #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct bpf_perf_event_data { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] pub struct linux_binprm { _unused: [u8; 0], } @@ -2899,6 +2894,14 @@ pub struct pt_regs { pub rsp: ::aya_ebpf_cty::c_ulong, pub ss: ::aya_ebpf_cty::c_ulong, } +pub type bpf_user_pt_regs_t = pt_regs; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct bpf_perf_event_data { + pub regs: bpf_user_pt_regs_t, + pub sample_period: __u64, + pub addr: __u64, +} pub type sa_family_t = ::aya_ebpf_cty::c_ushort; #[repr(C)] #[derive(Debug, Copy, Clone)] diff --git a/ebpf/aya-ebpf/src/programs/perf_event.rs b/ebpf/aya-ebpf/src/programs/perf_event.rs index d847fc31..c6f270e6 100644 --- a/ebpf/aya-ebpf/src/programs/perf_event.rs +++ b/ebpf/aya-ebpf/src/programs/perf_event.rs @@ -1,19 +1,21 @@ use core::ffi::c_void; +use aya_ebpf_bindings::bindings::bpf_perf_event_data; + use crate::EbpfContext; pub struct PerfEventContext { - ctx: *mut c_void, + pub ctx: *mut bpf_perf_event_data, } impl PerfEventContext { pub fn new(ctx: *mut c_void) -> Self { - Self { ctx } + Self { ctx: ctx.cast() } } } impl EbpfContext for PerfEventContext { fn as_ptr(&self) -> *mut c_void { - self.ctx + self.ctx.cast() } } diff --git a/test/integration-ebpf/Cargo.toml b/test/integration-ebpf/Cargo.toml index cb52e728..33715cfb 100644 --- a/test/integration-ebpf/Cargo.toml +++ b/test/integration-ebpf/Cargo.toml @@ -103,3 +103,7 @@ path = "src/xdp_sec.rs" [[bin]] name = "uprobe_cookie" path = "src/uprobe_cookie.rs" + +[[bin]] +name = "perf_event_bp" +path = "src/perf_event_bp.rs" diff --git a/test/integration-ebpf/src/perf_event_bp.rs b/test/integration-ebpf/src/perf_event_bp.rs new file mode 100644 index 00000000..f6928c01 --- /dev/null +++ b/test/integration-ebpf/src/perf_event_bp.rs @@ -0,0 +1,24 @@ +#![no_std] +#![no_main] +#![expect(unused_crate_dependencies, reason = "used in other bins")] + +use aya_ebpf::{ + EbpfContext as _, + macros::{map, perf_event}, + maps::HashMap, + programs::PerfEventContext, +}; + +#[cfg(not(test))] +extern crate ebpf_panic; + +#[map] +static READERS: HashMap = HashMap::with_max_entries(1, 0); + +#[perf_event] +fn perf_event_bp(ctx: PerfEventContext) -> u32 { + let tgid = ctx.tgid(); + let addr = unsafe { (*ctx.ctx).addr }; + let _ = READERS.insert(tgid, addr, 0); + 0 +} diff --git a/test/integration-test/Cargo.toml b/test/integration-test/Cargo.toml index 916db163..502cfcfc 100644 --- a/test/integration-test/Cargo.toml +++ b/test/integration-test/Cargo.toml @@ -23,6 +23,7 @@ aya-log = { path = "../../aya-log", version = "^0.2.1", default-features = false aya-obj = { path = "../../aya-obj", version = "^0.2.1", default-features = false } epoll = { workspace = true } futures = { workspace = true, features = ["alloc"] } +glob = { workspace = true } integration-common = { path = "../integration-common", features = ["user"] } libc = { workspace = true } log = { workspace = true } diff --git a/test/integration-test/src/lib.rs b/test/integration-test/src/lib.rs index 64f37d18..01e26f03 100644 --- a/test/integration-test/src/lib.rs +++ b/test/integration-test/src/lib.rs @@ -46,6 +46,7 @@ bpf_file!( MEMMOVE_TEST => "memmove_test", NAME_TEST => "name_test", PASS => "pass", + PERF_EVENT_BP => "perf_event_bp", RAW_TRACEPOINT => "raw_tracepoint", REDIRECT => "redirect", RELOCATIONS => "relocations", diff --git a/test/integration-test/src/tests.rs b/test/integration-test/src/tests.rs index b7d4d492..79122ac2 100644 --- a/test/integration-test/src/tests.rs +++ b/test/integration-test/src/tests.rs @@ -10,6 +10,7 @@ mod load; mod log; mod lsm; mod map_pin; +mod perf_event_bp; mod raw_tracepoint; mod rbpf; mod relocations; diff --git a/test/integration-test/src/tests/perf_event_bp.rs b/test/integration-test/src/tests/perf_event_bp.rs new file mode 100644 index 00000000..d9f56410 --- /dev/null +++ b/test/integration-test/src/tests/perf_event_bp.rs @@ -0,0 +1,122 @@ +use std::{ + fs::{self, File}, + io::{BufRead as _, BufReader}, +}; + +use aya::{ + Ebpf, + programs::{ + PerfEventScope, SamplePolicy, + perf_event::{BreakpointConfig, PerfBreakpointSize::HwBreakpointLen1, PerfEventConfig}, + }, + util::online_cpus, +}; +use glob::glob; +use log::{debug, info}; + +fn find_system_map_symbol(sym: &str) -> Option { + for e in fs::read_dir("/boot").unwrap() { + let e = e.unwrap(); + debug!("found /boot/{:}", e.path().to_str().unwrap()); + } + let map = glob("/boot/System.map*") + .expect("failed to read /boot/System.map*") + .next() + .expect("no matching System.map-* file found") + .unwrap(); + let file = File::open(&map).expect("failed to open System.map"); + let reader = BufReader::new(file); + + for line in reader.lines().map_while(Result::ok) { + // Format: " []" + let mut parts = line.split_whitespace(); + let addr_str = parts.next()?; + let _type = parts.next()?; + let name = parts.next()?; + if name == sym + && let Ok(addr) = u64::from_str_radix(addr_str, 16) + { + debug!("found symbol {sym} at address {addr:#x}"); + return Some(addr); + } + } + + None +} + +// Parse /proc/kallsyms and return the address for the given symbol name, if +// found. +fn find_kallsyms_symbol(sym: &str) -> Option { + let file = File::open("/proc/kallsyms").expect("failed to open /proc/kallsyms"); + let reader = BufReader::new(file); + + for line in reader.lines().map_while(Result::ok) { + // Format: " []" + let mut parts = line.split_whitespace(); + let addr_str = parts.next()?; + let _type = parts.next()?; + let name = parts.next()?; + if name == sym + && let Ok(addr) = u64::from_str_radix(addr_str, 16) + { + return Some(addr); + } + } + + None +} + +#[test_log::test] +fn perf_event_bp() { + let mut bpf = Ebpf::load(crate::PERF_EVENT_BP).unwrap(); + + // Search for the address of modprobe_path. Prefer to grab it directly from + // kallsyms, but if it's not there we can grab it from System.map and apply + // the kaslr offset. + let attach_addr = if let Some(addr) = find_kallsyms_symbol("modprobe_path") { + addr + } else { + let kaslr_offset: i64 = (i128::from(find_kallsyms_symbol("gunzip").unwrap()) + - (i128::from(find_system_map_symbol("gunzip").unwrap()))) + .try_into() + .unwrap(); + + find_system_map_symbol("modprobe_path") + .unwrap() + .wrapping_add_signed(kaslr_offset) + }; + let prog: &mut aya::programs::PerfEvent = bpf + .program_mut("perf_event_bp") + .unwrap() + .try_into() + .unwrap(); + prog.load().unwrap(); + + for cpu in online_cpus().unwrap() { + info!("attaching to cpu {cpu}"); + prog.attach( + PerfEventConfig::Breakpoint(BreakpointConfig::ReadWrite { + address: attach_addr, + size: HwBreakpointLen1, + }), + PerfEventScope::AllProcessesOneCpu { cpu }, + SamplePolicy::Period(1), + true, + ) + .unwrap(); + } + + // Trigger the hardware breakpoint by reading /proc/sys/kernel/modprobe, the + // sysctl connected to modprobe_path. + // + // See: https://elixir.bootlin.com/linux/v6.1.155/source/kernel/sysctl.c#L1770 + fs::read_to_string("/proc/sys/kernel/modprobe").expect("failed to read modprobe"); + + // Assert that the map contains an entry for this process, and that we read + // the address we expected to. + let map: aya::maps::HashMap<_, u32, u64> = + aya::maps::HashMap::try_from(bpf.map_mut("READERS").unwrap()).unwrap(); + let tgid = std::process::id(); + let read_addr = map.get(&tgid, 0).unwrap(); + assert_eq!(read_addr, attach_addr); +} diff --git a/xtask/public-api/aya-ebpf-bindings.txt b/xtask/public-api/aya-ebpf-bindings.txt index 7a38ec39..00a60f70 100644 --- a/xtask/public-api/aya-ebpf-bindings.txt +++ b/xtask/public-api/aya-ebpf-bindings.txt @@ -4972,6 +4972,9 @@ pub unsafe fn aya_ebpf_bindings::bindings::bpf_map_info::clone_to_uninit(&self, impl core::convert::From for aya_ebpf_bindings::bindings::bpf_map_info pub fn aya_ebpf_bindings::bindings::bpf_map_info::from(t: T) -> T #[repr(C)] pub struct aya_ebpf_bindings::bindings::bpf_perf_event_data +pub aya_ebpf_bindings::bindings::bpf_perf_event_data::addr: aya_ebpf_bindings::bindings::__u64 +pub aya_ebpf_bindings::bindings::bpf_perf_event_data::regs: aya_ebpf_bindings::bindings::bpf_user_pt_regs_t +pub aya_ebpf_bindings::bindings::bpf_perf_event_data::sample_period: aya_ebpf_bindings::bindings::__u64 impl core::clone::Clone for aya_ebpf_bindings::bindings::bpf_perf_event_data pub fn aya_ebpf_bindings::bindings::bpf_perf_event_data::clone(&self) -> aya_ebpf_bindings::bindings::bpf_perf_event_data impl core::fmt::Debug for aya_ebpf_bindings::bindings::bpf_perf_event_data @@ -7057,6 +7060,7 @@ pub type aya_ebpf_bindings::bindings::_bindgen_ty_6 = aya_ebpf_cty::ad::c_uint pub type aya_ebpf_bindings::bindings::_bindgen_ty_7 = aya_ebpf_cty::ad::c_uint pub type aya_ebpf_bindings::bindings::_bindgen_ty_8 = aya_ebpf_cty::ad::c_uint pub type aya_ebpf_bindings::bindings::_bindgen_ty_9 = aya_ebpf_cty::ad::c_uint +pub type aya_ebpf_bindings::bindings::bpf_user_pt_regs_t = aya_ebpf_bindings::bindings::pt_regs pub type aya_ebpf_bindings::bindings::sa_family_t = aya_ebpf_cty::c_ushort pub mod aya_ebpf_bindings::helpers pub unsafe fn aya_ebpf_bindings::helpers::bpf_bind(ctx: *mut aya_ebpf_bindings::bindings::bpf_sock_addr, addr: *mut aya_ebpf_bindings::bindings::sockaddr, addr_len: aya_ebpf_cty::ad::c_int) -> aya_ebpf_cty::od::c_long diff --git a/xtask/public-api/aya-ebpf.txt b/xtask/public-api/aya-ebpf.txt index ea62c132..0f59201c 100644 --- a/xtask/public-api/aya-ebpf.txt +++ b/xtask/public-api/aya-ebpf.txt @@ -1721,6 +1721,7 @@ impl core::convert::From for aya_ebpf::programs::lsm::LsmContext pub fn aya_ebpf::programs::lsm::LsmContext::from(t: T) -> T pub mod aya_ebpf::programs::perf_event pub struct aya_ebpf::programs::perf_event::PerfEventContext +pub aya_ebpf::programs::perf_event::PerfEventContext::ctx: *mut aya_ebpf_bindings::x86_64::bindings::bpf_perf_event_data impl aya_ebpf::programs::perf_event::PerfEventContext pub fn aya_ebpf::programs::perf_event::PerfEventContext::new(ctx: *mut core::ffi::c_void) -> Self impl aya_ebpf::EbpfContext for aya_ebpf::programs::perf_event::PerfEventContext @@ -2459,6 +2460,7 @@ pub fn aya_ebpf::programs::lsm::LsmContext::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya_ebpf::programs::lsm::LsmContext pub fn aya_ebpf::programs::lsm::LsmContext::from(t: T) -> T pub struct aya_ebpf::programs::PerfEventContext +pub aya_ebpf::programs::PerfEventContext::ctx: *mut aya_ebpf_bindings::x86_64::bindings::bpf_perf_event_data impl aya_ebpf::programs::perf_event::PerfEventContext pub fn aya_ebpf::programs::perf_event::PerfEventContext::new(ctx: *mut core::ffi::c_void) -> Self impl aya_ebpf::EbpfContext for aya_ebpf::programs::perf_event::PerfEventContext diff --git a/xtask/public-api/aya-obj.txt b/xtask/public-api/aya-obj.txt index 8406f83a..5e59c5ea 100644 --- a/xtask/public-api/aya-obj.txt +++ b/xtask/public-api/aya-obj.txt @@ -8057,24 +8057,38 @@ pub const aya_obj::generated::BTF_KIND_VOLATILE: aya_obj::generated::_bindgen_ty pub const aya_obj::generated::BTF_VAR_GLOBAL_ALLOCATED: aya_obj::generated::_bindgen_ty_43 pub const aya_obj::generated::BTF_VAR_GLOBAL_EXTERN: aya_obj::generated::_bindgen_ty_43 pub const aya_obj::generated::BTF_VAR_STATIC: aya_obj::generated::_bindgen_ty_43 -pub const aya_obj::generated::IFLA_XDP_ATTACHED: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_DRV_PROG_ID: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_EXPECTED_FD: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_FD: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_FLAGS: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_HW_PROG_ID: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_PROG_ID: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_SKB_PROG_ID: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::IFLA_XDP_UNSPEC: aya_obj::generated::_bindgen_ty_92 -pub const aya_obj::generated::NFPROTO_ARP: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_BRIDGE: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_DECNET: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_INET: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_IPV4: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_IPV6: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_NETDEV: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_NUMPROTO: aya_obj::generated::_bindgen_ty_99 -pub const aya_obj::generated::NFPROTO_UNSPEC: aya_obj::generated::_bindgen_ty_99 +pub const aya_obj::generated::HW_BREAKPOINT_EMPTY: aya_obj::generated::_bindgen_ty_45 +pub const aya_obj::generated::HW_BREAKPOINT_INVALID: aya_obj::generated::_bindgen_ty_45 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_1: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_2: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_3: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_4: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_5: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_6: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_7: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_LEN_8: aya_obj::generated::_bindgen_ty_44 +pub const aya_obj::generated::HW_BREAKPOINT_R: aya_obj::generated::_bindgen_ty_45 +pub const aya_obj::generated::HW_BREAKPOINT_RW: aya_obj::generated::_bindgen_ty_45 +pub const aya_obj::generated::HW_BREAKPOINT_W: aya_obj::generated::_bindgen_ty_45 +pub const aya_obj::generated::HW_BREAKPOINT_X: aya_obj::generated::_bindgen_ty_45 +pub const aya_obj::generated::IFLA_XDP_ATTACHED: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_DRV_PROG_ID: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_EXPECTED_FD: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_FD: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_FLAGS: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_HW_PROG_ID: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_PROG_ID: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_SKB_PROG_ID: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::IFLA_XDP_UNSPEC: aya_obj::generated::_bindgen_ty_94 +pub const aya_obj::generated::NFPROTO_ARP: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_BRIDGE: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_DECNET: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_INET: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_IPV4: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_IPV6: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_NETDEV: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_NUMPROTO: aya_obj::generated::_bindgen_ty_101 +pub const aya_obj::generated::NFPROTO_UNSPEC: aya_obj::generated::_bindgen_ty_101 pub const aya_obj::generated::NLMSG_ALIGNTO: u32 pub const aya_obj::generated::NR_BTF_KINDS: aya_obj::generated::_bindgen_ty_42 pub const aya_obj::generated::PERF_EVENT_IOC_DISABLE: u32 @@ -8097,36 +8111,36 @@ pub const aya_obj::generated::PERF_MAX_CONTEXTS_PER_STACK: u32 pub const aya_obj::generated::PERF_MAX_STACK_DEPTH: u32 pub const aya_obj::generated::SO_ATTACH_BPF: u32 pub const aya_obj::generated::SO_DETACH_BPF: u32 -pub const aya_obj::generated::TCA_BPF_ACT: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_CLASSID: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_FD: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_FLAGS: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_FLAGS_GEN: aya_obj::generated::_bindgen_ty_154 +pub const aya_obj::generated::TCA_BPF_ACT: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_CLASSID: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_FD: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_FLAGS: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_FLAGS_GEN: aya_obj::generated::_bindgen_ty_156 pub const aya_obj::generated::TCA_BPF_FLAG_ACT_DIRECT: u32 -pub const aya_obj::generated::TCA_BPF_ID: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_NAME: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_OPS: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_OPS_LEN: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_POLICE: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_TAG: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_BPF_UNSPEC: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::TCA_CHAIN: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_DUMP_FLAGS: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_DUMP_INVISIBLE: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_EGRESS_BLOCK: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_EXT_WARN_MSG: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_FCNT: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_HW_OFFLOAD: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_INGRESS_BLOCK: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_KIND: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_OPTIONS: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_PAD: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_RATE: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_STAB: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_STATS: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_STATS2: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_UNSPEC: aya_obj::generated::_bindgen_ty_174 -pub const aya_obj::generated::TCA_XSTATS: aya_obj::generated::_bindgen_ty_174 +pub const aya_obj::generated::TCA_BPF_ID: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_NAME: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_OPS: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_OPS_LEN: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_POLICE: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_TAG: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_BPF_UNSPEC: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::TCA_CHAIN: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_DUMP_FLAGS: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_DUMP_INVISIBLE: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_EGRESS_BLOCK: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_EXT_WARN_MSG: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_FCNT: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_HW_OFFLOAD: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_INGRESS_BLOCK: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_KIND: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_OPTIONS: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_PAD: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_RATE: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_STAB: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_STATS: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_STATS2: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_UNSPEC: aya_obj::generated::_bindgen_ty_176 +pub const aya_obj::generated::TCA_XSTATS: aya_obj::generated::_bindgen_ty_176 pub const aya_obj::generated::TC_H_CLSACT: u32 pub const aya_obj::generated::TC_H_INGRESS: u32 pub const aya_obj::generated::TC_H_MAJ_MASK: u32 @@ -8143,10 +8157,10 @@ pub const aya_obj::generated::XDP_FLAGS_MODES: u32 pub const aya_obj::generated::XDP_FLAGS_REPLACE: u32 pub const aya_obj::generated::XDP_FLAGS_SKB_MODE: u32 pub const aya_obj::generated::XDP_FLAGS_UPDATE_IF_NOEXIST: u32 -pub const aya_obj::generated::__IFLA_XDP_MAX: aya_obj::generated::_bindgen_ty_92 +pub const aya_obj::generated::__IFLA_XDP_MAX: aya_obj::generated::_bindgen_ty_94 pub const aya_obj::generated::__MAX_BPF_REG: aya_obj::generated::_bindgen_ty_1 -pub const aya_obj::generated::__TCA_BPF_MAX: aya_obj::generated::_bindgen_ty_154 -pub const aya_obj::generated::__TCA_MAX: aya_obj::generated::_bindgen_ty_174 +pub const aya_obj::generated::__TCA_BPF_MAX: aya_obj::generated::_bindgen_ty_156 +pub const aya_obj::generated::__TCA_MAX: aya_obj::generated::_bindgen_ty_176 pub type aya_obj::generated::__s16 = core::ffi::primitives::c_short pub type aya_obj::generated::__s32 = core::ffi::primitives::c_int pub type aya_obj::generated::__s64 = core::ffi::primitives::c_longlong @@ -8155,14 +8169,15 @@ pub type aya_obj::generated::__u32 = core::ffi::primitives::c_uint pub type aya_obj::generated::__u64 = core::ffi::primitives::c_ulonglong pub type aya_obj::generated::__u8 = core::ffi::primitives::c_uchar pub type aya_obj::generated::_bindgen_ty_10 = core::ffi::primitives::c_uint +pub type aya_obj::generated::_bindgen_ty_101 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_11 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_12 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_13 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_14 = core::ffi::primitives::c_ulong pub type aya_obj::generated::_bindgen_ty_15 = core::ffi::primitives::c_int -pub type aya_obj::generated::_bindgen_ty_154 = core::ffi::primitives::c_uint +pub type aya_obj::generated::_bindgen_ty_156 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_17 = core::ffi::primitives::c_uint -pub type aya_obj::generated::_bindgen_ty_174 = core::ffi::primitives::c_uint +pub type aya_obj::generated::_bindgen_ty_176 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_19 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_2 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_21 = core::ffi::primitives::c_uint @@ -8174,13 +8189,14 @@ pub type aya_obj::generated::_bindgen_ty_4 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_41 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_42 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_43 = core::ffi::primitives::c_uint +pub type aya_obj::generated::_bindgen_ty_44 = core::ffi::primitives::c_uint +pub type aya_obj::generated::_bindgen_ty_45 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_5 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_6 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_7 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_8 = core::ffi::primitives::c_uint pub type aya_obj::generated::_bindgen_ty_9 = core::ffi::primitives::c_uint -pub type aya_obj::generated::_bindgen_ty_92 = core::ffi::primitives::c_uint -pub type aya_obj::generated::_bindgen_ty_99 = core::ffi::primitives::c_uint +pub type aya_obj::generated::_bindgen_ty_94 = core::ffi::primitives::c_uint pub mod aya_obj::links pub mod aya_obj::maps pub enum aya_obj::maps::Map diff --git a/xtask/public-api/aya.txt b/xtask/public-api/aya.txt index 60309344..efe3f198 100644 --- a/xtask/public-api/aya.txt +++ b/xtask/public-api/aya.txt @@ -5299,6 +5299,54 @@ pub fn aya::programs::perf_attach::PerfLinkId::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::programs::perf_attach::PerfLinkId pub fn aya::programs::perf_attach::PerfLinkId::from(t: T) -> T pub mod aya::programs::perf_event +pub enum aya::programs::perf_event::BreakpointConfig +pub aya::programs::perf_event::BreakpointConfig::Empty +pub aya::programs::perf_event::BreakpointConfig::Empty::address: u64 +pub aya::programs::perf_event::BreakpointConfig::Empty::size: aya::programs::perf_event::PerfBreakpointSize +pub aya::programs::perf_event::BreakpointConfig::Execute +pub aya::programs::perf_event::BreakpointConfig::Execute::address: u64 +pub aya::programs::perf_event::BreakpointConfig::Read +pub aya::programs::perf_event::BreakpointConfig::Read::address: u64 +pub aya::programs::perf_event::BreakpointConfig::Read::size: aya::programs::perf_event::PerfBreakpointSize +pub aya::programs::perf_event::BreakpointConfig::ReadWrite +pub aya::programs::perf_event::BreakpointConfig::ReadWrite::address: u64 +pub aya::programs::perf_event::BreakpointConfig::ReadWrite::size: aya::programs::perf_event::PerfBreakpointSize +pub aya::programs::perf_event::BreakpointConfig::Write +pub aya::programs::perf_event::BreakpointConfig::Write::address: u64 +pub aya::programs::perf_event::BreakpointConfig::Write::size: aya::programs::perf_event::PerfBreakpointSize +impl core::clone::Clone for aya::programs::perf_event::BreakpointConfig +pub fn aya::programs::perf_event::BreakpointConfig::clone(&self) -> aya::programs::perf_event::BreakpointConfig +impl core::fmt::Debug for aya::programs::perf_event::BreakpointConfig +pub fn aya::programs::perf_event::BreakpointConfig::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::marker::Copy for aya::programs::perf_event::BreakpointConfig +impl core::marker::Freeze for aya::programs::perf_event::BreakpointConfig +impl core::marker::Send for aya::programs::perf_event::BreakpointConfig +impl core::marker::Sync for aya::programs::perf_event::BreakpointConfig +impl core::marker::Unpin for aya::programs::perf_event::BreakpointConfig +impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_event::BreakpointConfig +impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_event::BreakpointConfig +impl core::convert::Into for aya::programs::perf_event::BreakpointConfig where U: core::convert::From +pub fn aya::programs::perf_event::BreakpointConfig::into(self) -> U +impl core::convert::TryFrom for aya::programs::perf_event::BreakpointConfig where U: core::convert::Into +pub type aya::programs::perf_event::BreakpointConfig::Error = core::convert::Infallible +pub fn aya::programs::perf_event::BreakpointConfig::try_from(value: U) -> core::result::Result>::Error> +impl core::convert::TryInto for aya::programs::perf_event::BreakpointConfig where U: core::convert::TryFrom +pub type aya::programs::perf_event::BreakpointConfig::Error = >::Error +pub fn aya::programs::perf_event::BreakpointConfig::try_into(self) -> core::result::Result>::Error> +impl alloc::borrow::ToOwned for aya::programs::perf_event::BreakpointConfig where T: core::clone::Clone +pub type aya::programs::perf_event::BreakpointConfig::Owned = T +pub fn aya::programs::perf_event::BreakpointConfig::clone_into(&self, target: &mut T) +pub fn aya::programs::perf_event::BreakpointConfig::to_owned(&self) -> T +impl core::any::Any for aya::programs::perf_event::BreakpointConfig where T: 'static + ?core::marker::Sized +pub fn aya::programs::perf_event::BreakpointConfig::type_id(&self) -> core::any::TypeId +impl core::borrow::Borrow for aya::programs::perf_event::BreakpointConfig where T: ?core::marker::Sized +pub fn aya::programs::perf_event::BreakpointConfig::borrow(&self) -> &T +impl core::borrow::BorrowMut for aya::programs::perf_event::BreakpointConfig where T: ?core::marker::Sized +pub fn aya::programs::perf_event::BreakpointConfig::borrow_mut(&mut self) -> &mut T +impl core::clone::CloneToUninit for aya::programs::perf_event::BreakpointConfig where T: core::clone::Clone +pub unsafe fn aya::programs::perf_event::BreakpointConfig::clone_to_uninit(&self, dest: *mut u8) +impl core::convert::From for aya::programs::perf_event::BreakpointConfig +pub fn aya::programs::perf_event::BreakpointConfig::from(t: T) -> T #[repr(u32)] pub enum aya::programs::perf_event::HardwareEvent pub aya::programs::perf_event::HardwareEvent::BranchInstructions = 4 pub aya::programs::perf_event::HardwareEvent::BranchMisses = 5 @@ -5457,8 +5505,46 @@ impl core::clone::CloneToUninit for aya::programs::perf_event::HwCacheResult pub unsafe fn aya::programs::perf_event::HwCacheResult::clone_to_uninit(&self, dest: *mut u8) impl core::convert::From for aya::programs::perf_event::HwCacheResult pub fn aya::programs::perf_event::HwCacheResult::from(t: T) -> T +#[repr(u64)] pub enum aya::programs::perf_event::PerfBreakpointSize +pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen1 = 1 +pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen2 = 2 +pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen4 = 4 +pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen8 = 8 +impl core::clone::Clone for aya::programs::perf_event::PerfBreakpointSize +pub fn aya::programs::perf_event::PerfBreakpointSize::clone(&self) -> aya::programs::perf_event::PerfBreakpointSize +impl core::fmt::Debug for aya::programs::perf_event::PerfBreakpointSize +pub fn aya::programs::perf_event::PerfBreakpointSize::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::marker::Copy for aya::programs::perf_event::PerfBreakpointSize +impl core::marker::Freeze for aya::programs::perf_event::PerfBreakpointSize +impl core::marker::Send for aya::programs::perf_event::PerfBreakpointSize +impl core::marker::Sync for aya::programs::perf_event::PerfBreakpointSize +impl core::marker::Unpin for aya::programs::perf_event::PerfBreakpointSize +impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_event::PerfBreakpointSize +impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_event::PerfBreakpointSize +impl core::convert::Into for aya::programs::perf_event::PerfBreakpointSize where U: core::convert::From +pub fn aya::programs::perf_event::PerfBreakpointSize::into(self) -> U +impl core::convert::TryFrom for aya::programs::perf_event::PerfBreakpointSize where U: core::convert::Into +pub type aya::programs::perf_event::PerfBreakpointSize::Error = core::convert::Infallible +pub fn aya::programs::perf_event::PerfBreakpointSize::try_from(value: U) -> core::result::Result>::Error> +impl core::convert::TryInto for aya::programs::perf_event::PerfBreakpointSize where U: core::convert::TryFrom +pub type aya::programs::perf_event::PerfBreakpointSize::Error = >::Error +pub fn aya::programs::perf_event::PerfBreakpointSize::try_into(self) -> core::result::Result>::Error> +impl alloc::borrow::ToOwned for aya::programs::perf_event::PerfBreakpointSize where T: core::clone::Clone +pub type aya::programs::perf_event::PerfBreakpointSize::Owned = T +pub fn aya::programs::perf_event::PerfBreakpointSize::clone_into(&self, target: &mut T) +pub fn aya::programs::perf_event::PerfBreakpointSize::to_owned(&self) -> T +impl core::any::Any for aya::programs::perf_event::PerfBreakpointSize where T: 'static + ?core::marker::Sized +pub fn aya::programs::perf_event::PerfBreakpointSize::type_id(&self) -> core::any::TypeId +impl core::borrow::Borrow for aya::programs::perf_event::PerfBreakpointSize where T: ?core::marker::Sized +pub fn aya::programs::perf_event::PerfBreakpointSize::borrow(&self) -> &T +impl core::borrow::BorrowMut for aya::programs::perf_event::PerfBreakpointSize where T: ?core::marker::Sized +pub fn aya::programs::perf_event::PerfBreakpointSize::borrow_mut(&mut self) -> &mut T +impl core::clone::CloneToUninit for aya::programs::perf_event::PerfBreakpointSize where T: core::clone::Clone +pub unsafe fn aya::programs::perf_event::PerfBreakpointSize::clone_to_uninit(&self, dest: *mut u8) +impl core::convert::From for aya::programs::perf_event::PerfBreakpointSize +pub fn aya::programs::perf_event::PerfBreakpointSize::from(t: T) -> T pub enum aya::programs::perf_event::PerfEventConfig -pub aya::programs::perf_event::PerfEventConfig::Breakpoint +pub aya::programs::perf_event::PerfEventConfig::Breakpoint(aya::programs::perf_event::BreakpointConfig) pub aya::programs::perf_event::PerfEventConfig::Hardware(aya::programs::perf_event::HardwareEvent) pub aya::programs::perf_event::PerfEventConfig::HwCache pub aya::programs::perf_event::PerfEventConfig::HwCache::event: aya::programs::perf_event::HwCacheEvent @@ -5632,7 +5718,7 @@ pub fn aya::programs::perf_event::SoftwareEvent::from(t: T) -> T pub struct aya::programs::perf_event::PerfEvent impl aya::programs::perf_event::PerfEvent pub const aya::programs::perf_event::PerfEvent::PROGRAM_TYPE: aya::programs::ProgramType -pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_type: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result +pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_config: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result pub fn aya::programs::perf_event::PerfEvent::load(&mut self) -> core::result::Result<(), aya::programs::ProgramError> impl aya::programs::perf_event::PerfEvent pub fn aya::programs::perf_event::PerfEvent::detach(&mut self, link_id: aya::programs::perf_event::PerfEventLinkId) -> core::result::Result<(), aya::programs::ProgramError> @@ -9582,7 +9668,7 @@ pub fn aya::programs::lsm_cgroup::LsmCgroup::from(t: T) -> T pub struct aya::programs::PerfEvent impl aya::programs::perf_event::PerfEvent pub const aya::programs::perf_event::PerfEvent::PROGRAM_TYPE: aya::programs::ProgramType -pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_type: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result +pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_config: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result pub fn aya::programs::perf_event::PerfEvent::load(&mut self) -> core::result::Result<(), aya::programs::ProgramError> impl aya::programs::perf_event::PerfEvent pub fn aya::programs::perf_event::PerfEvent::detach(&mut self, link_id: aya::programs::perf_event::PerfEventLinkId) -> core::result::Result<(), aya::programs::ProgramError> diff --git a/xtask/src/codegen/aya.rs b/xtask/src/codegen/aya.rs index b8330e83..042ea9d5 100644 --- a/xtask/src/codegen/aya.rs +++ b/xtask/src/codegen/aya.rs @@ -67,6 +67,8 @@ fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<()> { .constified_enum("IFLA_.*") .constified_enum("TCA_.*") .constified_enum("BPF_RINGBUF_.*") + // PERF + .constified_enum("HW_BREAKPOINT_.*") // NETFILTER .constified_enum("NFPROTO_.*"); @@ -141,6 +143,7 @@ fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<()> { "PERF_FLAG_.*", "PERF_EVENT_.*", "PERF_MAX_.*", + "HW_BREAKPOINT_.*", // NETLINK "NLMSG_ALIGNTO", "IFLA_XDP_FD", diff --git a/xtask/src/run.rs b/xtask/src/run.rs index b52e8890..93597fab 100644 --- a/xtask/src/run.rs +++ b/xtask/src/run.rs @@ -1,4 +1,5 @@ use std::{ + collections::BTreeMap, ffi::{OsStr, OsString}, fmt::Write as _, fs::{self, OpenOptions}, @@ -18,6 +19,42 @@ use xtask::{AYA_BUILD_INTEGRATION_BPF, Errors}; const GEN_INIT_CPIO_PATCH: &str = include_str!("../patches/gen_init_cpio.c.macos.diff"); +#[derive(Default)] +struct KernelPackageGroup { + kernel: Option, + debug: Option, +} + +fn extract_deb(archive: &Path, dest: &Path) -> Result<()> { + fs::create_dir_all(dest).with_context(|| format!("failed to create {}", dest.display()))?; + + let mut dpkg = Command::new("dpkg-deb"); + dpkg.arg("--fsys-tarfile") + .arg(archive) + .stdout(Stdio::piped()); + let mut dpkg_child = dpkg + .spawn() + .with_context(|| format!("failed to spawn {dpkg:?}"))?; + let Child { stdout, .. } = &mut dpkg_child; + let stdout = stdout.take().unwrap(); + let mut archive_reader = tar::Archive::new(stdout); + archive_reader.unpack(dest).with_context(|| { + format!( + "failed to unpack archive {} to {}", + archive.display(), + dest.display() + ) + })?; + let status = dpkg_child + .wait() + .with_context(|| format!("failed to wait for {dpkg:?}"))?; + if !status.success() { + bail!("{dpkg:?} exited with {status}"); + } + + Ok(()) +} + #[derive(Parser)] enum Environment { /// Runs the integration tests locally. @@ -292,40 +329,88 @@ pub(crate) fn run(opts: Options) -> Result<()> { } let extraction_root = tempfile::tempdir().context("tempdir failed")?; - let mut errors = Vec::new(); - for (index, archive) in kernel_archives.iter().enumerate() { - let archive_dir = extraction_root - .path() - .join(format!("kernel-archive-{index}")); - fs::create_dir_all(&archive_dir) - .with_context(|| format!("failed to create {}", archive_dir.display()))?; - let mut dpkg = Command::new("dpkg-deb"); - dpkg.arg("--fsys-tarfile") - .arg(archive) - .stdout(Stdio::piped()); - let mut dpkg_child = dpkg - .spawn() - .with_context(|| format!("failed to spawn {dpkg:?}"))?; - let Child { stdout, .. } = &mut dpkg_child; - let stdout = stdout.take().unwrap(); - let mut archive_reader = tar::Archive::new(stdout); - archive_reader.unpack(&archive_dir).with_context(|| { - format!( - "failed to unpack archive {} to {}", - archive.display(), - archive_dir.display() - ) + let mut package_groups: BTreeMap = BTreeMap::new(); + for archive in &kernel_archives { + let file_name = archive.file_name().ok_or_else(|| { + anyhow!("archive path missing filename: {}", archive.display()) })?; - let status = dpkg_child - .wait() - .with_context(|| format!("failed to wait for {dpkg:?}"))?; - if !status.success() { - bail!("{dpkg:?} exited with {status}"); + let file_name = file_name.to_string_lossy(); + let (package_name, _) = file_name + .split_once('_') + .ok_or_else(|| anyhow!("unexpected archive filename: {file_name}"))?; + let (base, is_debug) = if let Some(base) = package_name.strip_suffix("-dbg") { + (base, true) + } else if let Some(base) = package_name.strip_suffix("-dbgsym") { + (base, true) + } else if let Some(base) = package_name.strip_suffix("-unsigned") { + (base, false) + } else { + (package_name, false) + }; + let entry = package_groups.entry(OsString::from(base)).or_default(); + if is_debug { + entry.debug = Some(archive.clone()); + } else { + entry.kernel = Some(archive.clone()); } + } + + let mut errors = Vec::new(); + for (index, (base, group)) in package_groups.into_iter().enumerate() { + let KernelPackageGroup { kernel, debug } = group; + let base_display = base.to_string_lossy(); + let kernel_archive = + kernel.ok_or_else(|| anyhow!("missing kernel package for {base_display}"))?; + + let archive_dir = extraction_root + .path() + .join(format!("kernel-archive-{index}-image")); + extract_deb(&kernel_archive, &archive_dir)?; + + let debug_maps = if let Some(debug_archive) = debug { + let debug_dir = extraction_root + .path() + .join(format!("kernel-archive-{index}-debug")); + extract_deb(&debug_archive, &debug_dir)?; + WalkDir::new(&debug_dir) + .into_iter() + .filter_map(|entry| entry.ok()) + .filter(|entry| entry.file_type().is_file()) + .filter_map(|entry| { + let path = entry.into_path(); + let is_system_map = path + .file_name() + .map(|file_name| { + matches!( + file_name.as_encoded_bytes(), + [ + b'S', + b'y', + b's', + b't', + b'e', + b'm', + b'.', + b'm', + b'a', + b'p', + b'-', + .. + ] + ) + }) + .unwrap_or(false); + if is_system_map { Some(path) } else { None } + }) + .collect::>() + } else { + Vec::new() + }; let mut kernel_images = Vec::new(); let mut configs = Vec::new(); + let mut kernel_maps = Vec::new(); for entry in WalkDir::new(&archive_dir) { let entry = entry.with_context(|| { format!("failed to read entry in {}", archive_dir.display()) @@ -357,22 +442,59 @@ pub(crate) fn run(opts: Options) -> Result<()> { [b'c', b'o', b'n', b'f', b'i', b'g', b'-', ..] => { configs.push(path); } + // "System.map-" + [ + b'S', + b'y', + b's', + b't', + b'e', + b'm', + b'.', + b'm', + b'a', + b'p', + b'-', + .., + ] => { + kernel_maps.push(path); + } _ => {} } } } let (kernel_image, kernel_version) = match kernel_images.as_slice() { [kernel_image] => kernel_image, - [] => bail!("no kernel images in {}", archive.display()), + [] => bail!("no kernel images in {}", kernel_archive.display()), kernel_images => bail!( "multiple kernel images in {}: {:?}", - archive.display(), + kernel_archive.display(), kernel_images ), }; let config = match configs.as_slice() { [config] => config, - configs => bail!("multiple configs in {}: {:?}", archive.display(), configs), + configs => bail!( + "multiple configs in {}: {:?}", + kernel_archive.display(), + configs + ), + }; + let system_map = match debug_maps.as_slice() { + [system_map] => system_map, + [] => match kernel_maps.as_slice() { + [system_map] => system_map, + kernel_maps => bail!( + "multiple kernel System.maps in {}: {:?}", + kernel_archive.display(), + kernel_maps + ), + }, + system_maps => bail!( + "multiple debug System.maps in {}: {:?}", + kernel_archive.display(), + system_maps + ), }; let mut modules_dirs = Vec::new(); @@ -395,10 +517,10 @@ pub(crate) fn run(opts: Options) -> Result<()> { } let modules_dir = match modules_dirs.as_slice() { [modules_dir] => modules_dir, - [] => bail!("no modules directories in {}", archive.display()), + [] => bail!("no modules directories in {}", kernel_archive.display()), modules_dirs => bail!( "multiple modules directories in {}: {:?}", - archive.display(), + kernel_archive.display(), modules_dirs ), }; @@ -512,6 +634,11 @@ pub(crate) fn run(opts: Options) -> Result<()> { write_file(&Path::new("/boot").join(name), config, "644 0 0"); } + write_file(Path::new("/boot/System.map"), system_map, "644 0 0"); + if let Some(name) = system_map.file_name() { + write_file(&Path::new("/boot").join(name), system_map, "644 0 0"); + } + test_distro.iter().for_each(|(name, path)| { if name == "init" { write_file(Path::new("/init"), path, "755 0 0");