CHANGELOG.md 56 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.2.1 (2024-11-01)

New Features

  • Rename Bpf to Ebpf And BpfLoader to EbpfLoader. This also adds type aliases to preserve the use of the old names, making updating to a new Aya release less of a burden. These aliases are marked as deprecated since we'll likely remove them in a later release.

Bug Fixes

  • Fill bss maps with zeros The loader should fill bss maps with zeros according to the size of the ELF section. Failure to do so yields weird verifier messages as follows:

    cannot access ptr member ops with moff 0 in struct bpf_map with off 0 size 4
    

Reference to this in the cilium/ebpf code is here [1]. I could not find a reference in libbpf.

Other

  • cgroup_iter_order NFPROTO* nf_inet_hooks Adds the following to codegen:
    • bpf_cgroup_iter_order: used in bpf_link_info.iter.group.order
    • NFPROTO_*: used in bpf_link_info.netfilter.pf
    • nf_inet_hooks: used in bpf_link_info.netfilter.hooknum

Include linux/netfilter.h in linux_wrapper.h for NFPROTO_* and nf_inet_hooks to generate.

  • revamp MapInfo be more friendly with older kernels Adds detection for whether a field is available in MapInfo:
    • For map_type(), we treturn new enum MapType instead of the integer representation.
    • For fields that can't be zero, we return Option<NonZero*> type.
    • For name_as_str(), it now uses the feature probe bpf_name() to detect if field is available. Although the feature probe checks for program name, it can also be used for map name since they were both introduced in the same commit.
  • revamp ProgramInfo be more friendly with older kernels Purpose of this commit is to add detections for whether a field is available in ProgramInfo.
    • For program_type(), we return the new enum ProgramType instead of the integer representation.
    • For fields that we know cannot be zero, we return Option<NonZero*> type.
    • For name_as_str(), it now also uses the feature probe bpf_name() to detect if field is available or not.
    • Two additional feature probes are added for the fields:
      • prog_info_map_ids() probe -> map_ids() field
      • prog_info_gpl_compatible() probe -> gpl_compatible() field

With the prog_info_map_ids() probe, the previous implementation that I had for bpf_prog_get_info_by_fd() is shortened to use the probe instead of having to make 2 potential syscalls.

The test_loaded_at() test is also moved into info tests since it is better related to the info tests.

  • add conversion u32 to enum type for prog, link, & attach type Add conversion from u32 to program type, link type, and attach type. Additionally, remove duplicate match statement for u32 conversion to BPF_MAP_TYPE_BLOOM_FILTER & BPF_MAP_TYPE_CGRP_STORAGE.

New error InvalidTypeBinding<T> is created to represent when a parsed/received value binding to a type is invalid. This is used in the new conversions added here, and also replaces InvalidMapTypeError in TryFrom for bpf_map_type.

  • add archs powerpc64 and s390x to aya bpfman, a project using aya, has a requirement to support powerpc64 and s390x architectures. Adding these two architectures to aya.
  • Generate new bindings

Test

  • adjust test to not use byte arrays Where possible, replace the hardcoded byte arrays in the tests with the structs they represent, then convert the structs to byte arrays.
  • adjust test byte arrays for big endian Adding support for s390x (big endian architecture) and found that some of the unit tests have structures and files implemented as byte arrays. They are all coded as little endian and need a bug endian version to work properly.

New Features (BREAKING)

  • Rename BpfRelocationError -> EbpfRelocationError
  • Rename BpfSectionKind to EbpfSectionKind

Commit Statistics

  • 25 commits contributed to the release over the course of 241 calendar days.
  • 247 days passed between releases.
  • 12 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details * **Uncategorized** - Merge pull request #1073 from dave-tucker/reloc-bug ([`b2ac9fe`](https://github.com/aya-rs/aya/commit/b2ac9fe85d)) - Fill bss maps with zeros ([`ca0c32d`](https://github.com/aya-rs/aya/commit/ca0c32d107)) - Merge pull request #1055 from aya-rs/codegen ([`59b3873`](https://github.com/aya-rs/aya/commit/59b3873a92)) - [codegen] Update libbpf to 80b16457cb ([`f8ad84c`](https://github.com/aya-rs/aya/commit/f8ad84c3d3)) - Cgroup_iter_order NFPROTO* nf_inet_hooks ([`366c599`](https://github.com/aya-rs/aya/commit/366c599c20)) - Release aya-obj v0.2.0, aya v0.13.0, safety bump aya v0.13.0 ([`c169b72`](https://github.com/aya-rs/aya/commit/c169b727e6)) - Appease clippy ([`aa240ba`](https://github.com/aya-rs/aya/commit/aa240baadf)) - Merge pull request #1007 from tyrone-wu/aya/info-api ([`15eb935`](https://github.com/aya-rs/aya/commit/15eb935bce)) - Revamp MapInfo be more friendly with older kernels ([`fbb0930`](https://github.com/aya-rs/aya/commit/fbb09304a2)) - Revamp ProgramInfo be more friendly with older kernels ([`88f5ac3`](https://github.com/aya-rs/aya/commit/88f5ac3114)) - Add conversion u32 to enum type for prog, link, & attach type ([`1634fa7`](https://github.com/aya-rs/aya/commit/1634fa7188)) - Merge pull request #974 from Billy99/billy99-arch-ppc64-s390x ([`ab5e688`](https://github.com/aya-rs/aya/commit/ab5e688fd4)) - Adjust test to not use byte arrays ([`4dc4b5c`](https://github.com/aya-rs/aya/commit/4dc4b5ccd4)) - Add archs powerpc64 and s390x to aya ([`b513af1`](https://github.com/aya-rs/aya/commit/b513af12e8)) - Adjust test byte arrays for big endian ([`eef7346`](https://github.com/aya-rs/aya/commit/eef7346fb2)) - Merge pull request #989 from aya-rs/codegen ([`8015e10`](https://github.com/aya-rs/aya/commit/8015e10079)) - [codegen] Update libbpf to 686f600bca ([`8d7446e`](https://github.com/aya-rs/aya/commit/8d7446e011)) - Merge pull request #978 from aya-rs/codegen ([`06aa5c8`](https://github.com/aya-rs/aya/commit/06aa5c8ed3)) - [codegen] Update libbpf to c1a6c770c4 ([`8b50a6a`](https://github.com/aya-rs/aya/commit/8b50a6a573)) - Document miri skip reasons ([`35962a4`](https://github.com/aya-rs/aya/commit/35962a4794)) - Generate new bindings ([`b06ff40`](https://github.com/aya-rs/aya/commit/b06ff40278)) - Merge pull request #528 from dave-tucker/rename-all-the-things ([`63d8d4d`](https://github.com/aya-rs/aya/commit/63d8d4d34b)) - Rename Bpf to Ebpf ([`8c79b71`](https://github.com/aya-rs/aya/commit/8c79b71bd5)) - Rename BpfRelocationError -> EbpfRelocationError ([`fd48c55`](https://github.com/aya-rs/aya/commit/fd48c55466)) - Rename BpfSectionKind to EbpfSectionKind ([`cf3e2ca`](https://github.com/aya-rs/aya/commit/cf3e2ca677))

0.2.0 (2024-10-09)

New Features

  • Rename Bpf to Ebpf And BpfLoader to EbpfLoader. This also adds type aliases to preserve the use of the old names, making updating to a new Aya release less of a burden. These aliases are marked as deprecated since we'll likely remove them in a later release.

Other

  • revamp MapInfo be more friendly with older kernels Adds detection for whether a field is available in MapInfo:
    • For map_type(), we treturn new enum MapType instead of the integer representation.
    • For fields that can't be zero, we return Option<NonZero*> type.
    • For name_as_str(), it now uses the feature probe bpf_name() to detect if field is available. Although the feature probe checks for program name, it can also be used for map name since they were both introduced in the same commit.
  • revamp ProgramInfo be more friendly with older kernels Purpose of this commit is to add detections for whether a field is available in ProgramInfo.
    • For program_type(), we return the new enum ProgramType instead of the integer representation.
    • For fields that we know cannot be zero, we return Option<NonZero*> type.
    • For name_as_str(), it now also uses the feature probe bpf_name() to detect if field is available or not.
    • Two additional feature probes are added for the fields:
      • prog_info_map_ids() probe -> map_ids() field
      • prog_info_gpl_compatible() probe -> gpl_compatible() field

With the prog_info_map_ids() probe, the previous implementation that I had for bpf_prog_get_info_by_fd() is shortened to use the probe instead of having to make 2 potential syscalls.

The test_loaded_at() test is also moved into info tests since it is better related to the info tests.

  • add conversion u32 to enum type for prog, link, & attach type Add conversion from u32 to program type, link type, and attach type. Additionally, remove duplicate match statement for u32 conversion to BPF_MAP_TYPE_BLOOM_FILTER & BPF_MAP_TYPE_CGRP_STORAGE.

New error InvalidTypeBinding<T> is created to represent when a parsed/received value binding to a type is invalid. This is used in the new conversions added here, and also replaces InvalidMapTypeError in TryFrom for bpf_map_type.

  • add archs powerpc64 and s390x to aya bpfman, a project using aya, has a requirement to support powerpc64 and s390x architectures. Adding these two architectures to aya.
  • Generate new bindings

Test

  • adjust test to not use byte arrays Where possible, replace the hardcoded byte arrays in the tests with the structs they represent, then convert the structs to byte arrays.
  • adjust test byte arrays for big endian Adding support for s390x (big endian architecture) and found that some of the unit tests have structures and files implemented as byte arrays. They are all coded as little endian and need a bug endian version to work properly.

New Features (BREAKING)

  • Rename BpfRelocationError -> EbpfRelocationError
  • Rename BpfSectionKind to EbpfSectionKind

0.1.0 (2024-02-28)

Chore

  • Use the cargo workspace package table This allows for inheritance of common fields from the workspace root. The following fields have been made common:

    • authors
    • license
    • repository
    • homepage
    • edition
  • Appease clippy unused imports

Documentation

  • Add CHANGELOG

Other

  • appease new nightly clippy lints

     error: unnecessary use of `get("foo").is_some()`
         --> aya-obj/src/obj.rs:1690:26
          |
     1690 |         assert!(obj.maps.get("foo").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key("foo")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
     note: the lint level is defined here
         --> aya-obj/src/lib.rs:68:9
          |
     68   | #![deny(clippy::all, missing_docs)]
          |         ^^^^^^^^^^^
          = note: `#[deny(clippy::unnecessary_get_then_check)]` implied by `#[deny(clippy::all)]`
       
     error: unnecessary use of `get("foo").is_some()`
         --> aya-obj/src/obj.rs:1777:26
          |
     1777 |         assert!(obj.maps.get("foo").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key("foo")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
       
     error: unnecessary use of `get("bar").is_some()`
         --> aya-obj/src/obj.rs:1778:26
          |
     1778 |         assert!(obj.maps.get("bar").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key("bar")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
       
     error: unnecessary use of `get("baz").is_some()`
         --> aya-obj/src/obj.rs:1779:26
          |
     1779 |         assert!(obj.maps.get("baz").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key("baz")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
       
     error: unnecessary use of `get(".bss").is_some()`
         --> aya-obj/src/obj.rs:1799:26
          |
     1799 |         assert!(obj.maps.get(".bss").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(".bss")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
       
     error: unnecessary use of `get(".rodata").is_some()`
         --> aya-obj/src/obj.rs:1810:26
          |
     1810 |         assert!(obj.maps.get(".rodata").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(".rodata")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
       
     error: unnecessary use of `get(".rodata.boo").is_some()`
         --> aya-obj/src/obj.rs:1821:26
          |
     1821 |         assert!(obj.maps.get(".rodata.boo").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(".rodata.boo")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
       
     error: unnecessary use of `get(".data").is_some()`
         --> aya-obj/src/obj.rs:1832:26
          |
     1832 |         assert!(obj.maps.get(".data").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(".data")`
          |
          = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
       
     error: unnecessary use of `get(".data.boo").is_some()`
         --> aya-obj/src/obj.rs:1843:26
          |
     1843 |         assert!(obj.maps.get(".data.boo").is_some());
          |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(".data.boo")`
    
  • Handle lack of match of enum variants correctly When comparing local_spec with target_spec for enum relocations, we can encounter a situation when a matchinng variant in a candidate spec doesn't exist.

Before this change, such case wasn't handled explicitly, therefore resulted in returning currently constructed target_spec at the end. The problem is that such target_spec was, due to lack of match, incomplete. It didn't contain any accessors nor parts.

Later usage of such incomplete target_spec was leading to panics, since the code operating on enums' target_spec expects at least one accessor to be available.

  • don't parse labels as programs Fixes a bug introduced by https://github.com/aya-rs/aya/pull/413 where we were generating a bunch of spurious LBB* programs.
  • remove redundant keys default-features = false is already in the root Cargo.toml.
  • group_imports = "StdExternalCrate" High time we stop debating this; let the robots do the work.
  • make maps work on kernels not supporting ProgIds On startup, the kernel is probed for support of chained program ids for CpuMap, DevMap and DevMapHash, and will patch maps at load time to have the proper size. Then, at runtime, the support is checked and will error out if a program id is passed when the kernel does not support it.
  • add support for map-bound XDP programs Such programs are to be bound to cpumap or devmap instead of the usual network interfaces.
  • MapFd and SockMapFd are owned
  • reduce indirection in section parsing Remove repetition of permitted cgroup attach types. Make optionality of name more explicit rather than pretending both kind and name are equal to section.
  • MapData::fd is non-optional The primary driver of change here is that MapData::create is now a factory function that returns Result<Self, _> rather than mutating &mut self. The remaining changes are consequences of that change, the most notable of which is the removal of several errors which are no longer possible.
  • Add clang-format
  • s/types.types[i]/*t/ where possible We already have a mutable reference in scope, use it where possible.
  • Mutate BTF in-place without clone The BTF we're working on is Cow anyway so modifying in-place is fine. All we need to do is store some information before we start our mutable iteration to avoid concurrently borrowing types both mutably and immutably.
  • use Self instead of restating the type
  • avoid multiple vector allocations Rather than creating an empty vector and iteratively appending - which might induce intermediate allocations - create an ExactSizeIterator and collect it into a vector, which should produce exactly one allocation.
  • Fix (func|line)_info multiple progs in section This commit fixes the (func|line)_info when we have multiple programs in the same section. The integration test reloc.bpf.c serves as our test case here. This required filtering down the (func|line)_info to only that in scope of the current symbol + then adjusting the offets to appease the kernel.
  • Remove name from ProgramSection The name here is never used as we get the program name from the symbol table instead.
  • Propagate sleepable into ProgramSection
  • Find programs using the symbol table This makes a few changes to the way that Aya reads the ELF object files.

    1. To find programs in a section, we use the symbols table. This allows for cases where multiple programs could appear in the same section.
    2. When parsing our ELF file we build symbols_by_section_index as an optimization as we use it for legacy maps, BTF maps and now programs.

As a result of theses changes the "NAME" used in bpf.prog_mut("NAME") is now ALWAYS the same as the function name in the eBPF code, making the user experience more consistent.

  • better panic messages Always include operands in failing assertions. Use assert_matches over manual match + panic.
  • Define dependencies on the workspace level This way we will avoid version mismatches and make differences in features across our crates clearer.
  • avoid an allocation
  • remove dead code This logic moved in bb595c4e69. The mutation here prevented the compiler from noticing.
  • don't allocate static strings
  • aya-obj: Make it possible to externally assemble BtfEnum
  • Make Features part of the public API This commit adds a new probe for bpf_attach_cookie, which would be used to implement USDT probes. Since USDT probes aren't currently supported, we this triggers a dead_code warning in clippy.

There are cases where exposing FEATURES - our lazy static - is actually helpful to users of the library. For example, they may wish to choose to load a different version of their bytecode based on current features. Or, in the case of an orchestrator like bpfd, we might want to allow users to describe which features their program needs and return nice error message is one or more nodes in their cluster doesn't support the necessary feature set.

To do this without breaking the API, we make all the internal members of the Features and BtfFeatures structs private, and add accessors for them. We then add a features() API to avoid leaking the lazy_static.

  • allow global value to be optional This allow to not error out when a global symbol is missing from the object.
  • update hashbrown requirement from 0.13 to 0.14 Updates the requirements on hashbrown to permit the latest version.

updated-dependencies:

  • dependency-name: hashbrown dependency-type: direct:production ...
  • update rbpf requirement from 0.1.0 to 0.2.0 Updates the requirements on rbpf to permit the latest version.

updated-dependencies:

  • dependency-name: rbpf dependency-type: direct:production ...
  • Make relocations less strict Missing relocations at load time shouldn't cause an error in aya-obj but instead poison related instructions.

This makes struct flavors work.

  • Apply BTF relocations to all functions This fix aya wrong logic causing non entrypoint functions to not have any BTF relocations working.

Also fix missing section_offset computation for instruction offset in multiple spots.

  • Do not create data maps on kernel without global data support Fix map creation failure when a BPF have a data section on older kernel. (< 5.2)

If the BPF uses that section, relocation will fail accordingly and report an error.

  • Fix ProgramSection::from_str for bss and rodata sections
  • Move program's functions to the same map
  • update object requirement from 0.30 to 0.31 Updates the requirements on object to permit the latest version.

updated-dependencies:

  • dependency-name: object dependency-type: direct:production ...
  • flip feature "no_std" to feature "std" This fixes cargo build --all-features by sidestepping the feature unification problem described in The Cargo Book[0].

Add cargo hack --feature-powerset to CI to enforce that this doesn't regress (and that all combinations of features work).

Since error_in_core is nightly-only, use core-error and a fake std module to allow aya-obj to build without std on stable.

[0] https://doc.rust-lang.org/cargo/reference/features.html#feature-unification

  • Add sanitize code for kernels without bpf_probe_read_kernel Required for kernel before 5.5.

Also move Features to aya-obj.

  • fix DATASEC to STRUCT conversion This fix the following issues:
    • Previously the DATASEC name wasn't sanitized resulting on "Invalid name" returned by old kernels.
    • The newly created BTF struct had a size of 0 making old kernels refuse it.

This was tested on Debian 10 with kernel 4.19.0-21.

  • support relocations across multiple text sections + fixes Fix R_BPF_64_64 text relocations in sections other than .text (for instance .text.unlikely). Also fix misc bugs triggered by integration tests.
  • change two drain() calls to into_iter()
  • rework maps section parsing Avoid allocations and add comments explaining how things work.
  • fix compilation with nightly
  • More discrete feature logging Just use the Debug formatter vs. printing a message for each probe.
  • Make features a lazy_static
  • Add multibuffer support for XDP
  • Add support for multibuffer programs This adds support for loading XDP programs that are multi-buffer capable, which is signalled using the xdp.frags section name. When this is set, we should set the BPF_F_XDP_HAS_FRAGS flag when loading the program into the kernel.
  • btf: add support for BTF_KIND_ENUM64
  • btf: fix relocations for signed enums (32 bits) Enums now carry a signed bit in the info flags. Take it into account when applying enum relocations.
  • btf: switch ComputedRelocationValue::value to u64 This is in preparation of adding Enum64 relocation support
  • Add new map types Include all new map types which were included in the last libbpf update (5d13fd5aca).
  • Update BPF_MAP_TYPE_CGROUP_STORAGE name to BPF_MAP_TYPE_CGRP_STORAGE It changed in libbpf
  • update documentation and versioning info
    • Set the version number of aya-obj to 0.1.0.
    • Update the description of the aya-obj crate.
    • Add a section in README and rustdoc warning about the unstable API.
  • add documentation on program names This commit adds documentation on how program names are parsed from section names, as is used by aya_obj::Object.programs as HashMap keys, and updates the examples into using program names.
  • fix rustfmt diffs and typos
  • add no_std feature The crate has few libstd dependencies. Since it should be platform- independent in principle, making it no_std like the object crate would seem reasonable.

However, the feature error_in_core is not yet stabilized, and the thiserror crate currently offers no no_std support. When the feature no_std is selected, we enable the error_in_core feature, switch to thiserror-core and replace the HashMap with the one in hashbrown.

  • add integration tests against rbpf
  • add basic documentation to public members Types relevant to maps are moved into aya_obj::maps. Some members are marked pub(crate) again.
  • migrate aya::obj into a separate crate To split the crate into two, several changes were made:
    1. Most pub(crate) are now pub to allow access from Aya;
    2. Parts of BpfError are merged into, for example, RelocationError;
    3. BTF part of Features is moved into the new crate;
    4. #![deny(missing_docs)] is removed temporarily;
    5. Some other code gets moved into the new crate, mainly:
      • aya::{bpf_map_def, BtfMapDef, PinningType},
      • aya::programs::{CgroupSock*AttachType},

The new crate is currenly allowing missing_docs. Member visibility will be adjusted later to minimize exposure of implementation details.

  • migrate bindgen destination

Test

  • avoid lossy string conversions We can be strict in tests.

Commit Statistics

  • 146 commits contributed to the release.
  • 63 commits were understood as conventional.
  • 1 unique issue was worked on: #608

Commit Details

view details * **[#608](https://github.com/aya-rs/aya/issues/608)** - Fix load errors for empty (but existent) BTF/BTF.ext sections ([`5894c4c`](https://github.com/aya-rs/aya/commit/5894c4ce82)) * **Uncategorized** - Release aya-obj v0.1.0, aya v0.12.0, safety bump aya-log v0.2.0 ([`0e99fa0`](https://github.com/aya-rs/aya/commit/0e99fa0f34)) - Merge pull request #891 from dave-tucker/changelog ([`431ce23`](https://github.com/aya-rs/aya/commit/431ce23f27)) - Add CHANGELOG ([`72e8aab`](https://github.com/aya-rs/aya/commit/72e8aab6c8)) - Appease new nightly clippy lints ([`3369169`](https://github.com/aya-rs/aya/commit/3369169aac)) - Merge pull request #882 from dave-tucker/metadata ([`0fadd69`](https://github.com/aya-rs/aya/commit/0fadd69537)) - Use the cargo workspace package table ([`b3e7ef7`](https://github.com/aya-rs/aya/commit/b3e7ef741c)) - Merge pull request #885 from dave-tucker/nightly-up ([`2d72197`](https://github.com/aya-rs/aya/commit/2d721971cf)) - Appease clippy unused imports ([`770a95e`](https://github.com/aya-rs/aya/commit/770a95e077)) - Handle lack of match of enum variants correctly ([`c05a3b6`](https://github.com/aya-rs/aya/commit/c05a3b69b7)) - Don't parse labels as programs ([`35e21ae`](https://github.com/aya-rs/aya/commit/35e21ae007)) - Merge pull request #812 from tamird/redundant-cargo ([`715d490`](https://github.com/aya-rs/aya/commit/715d49022e)) - Remove redundant keys ([`cc48523`](https://github.com/aya-rs/aya/commit/cc48523347)) - Merge pull request #797 from aya-rs/rustfmt-group-imports ([`373fb7b`](https://github.com/aya-rs/aya/commit/373fb7bf06)) - Group_imports = "StdExternalCrate" ([`d16e607`](https://github.com/aya-rs/aya/commit/d16e607fd4)) - Merge pull request #527 from Tuetuopay/xdpmaps ([`7f9ce06`](https://github.com/aya-rs/aya/commit/7f9ce062f4)) - Aya, bpf: misc fixes following review comments ([`579e3ce`](https://github.com/aya-rs/aya/commit/579e3cee22)) - Make maps work on kernels not supporting ProgIds ([`00dc7a5`](https://github.com/aya-rs/aya/commit/00dc7a5bd4)) - Add support for map-bound XDP programs ([`139f382`](https://github.com/aya-rs/aya/commit/139f382638)) - Merge pull request #770 from aya-rs/mapfd-is-owned ([`41d01f6`](https://github.com/aya-rs/aya/commit/41d01f638b)) - `MapFd` and `SockMapFd` are owned ([`f415926`](https://github.com/aya-rs/aya/commit/f41592663c)) - Merge pull request #766 from aya-rs/obj-better-sense ([`e9690df`](https://github.com/aya-rs/aya/commit/e9690df834)) - Reduce indirection in section parsing ([`c139627`](https://github.com/aya-rs/aya/commit/c139627f8f)) - Merge pull request #742 from aya-rs/avoid-utf-assumption ([`8ffd9bb`](https://github.com/aya-rs/aya/commit/8ffd9bb236)) - Avoid lossy string conversions ([`572d047`](https://github.com/aya-rs/aya/commit/572d047e37)) - Merge pull request #758 from aya-rs/map-fd-not-option ([`1d5f764`](https://github.com/aya-rs/aya/commit/1d5f764d07)) - MapData::fd is non-optional ([`89bc255`](https://github.com/aya-rs/aya/commit/89bc255f1d)) - Merge pull request #749 from dave-tucker/clang-format ([`8ce1c00`](https://github.com/aya-rs/aya/commit/8ce1c00ad8)) - Add clang-format ([`0212400`](https://github.com/aya-rs/aya/commit/02124002c8)) - Merge pull request #734 from aya-rs/reduce-slicing ([`d3513e7`](https://github.com/aya-rs/aya/commit/d3513e7010)) - S/types.types[i]/*t/ where possible ([`dfb6020`](https://github.com/aya-rs/aya/commit/dfb6020a1d)) - Merge pull request #725 from dave-tucker/enum64 ([`2a55fc7`](https://github.com/aya-rs/aya/commit/2a55fc7bd3)) - Aya, aya-obj: Implement ENUM64 fixups ([`e38e256`](https://github.com/aya-rs/aya/commit/e38e2566e3)) - Merge pull request #731 from dave-tucker/noclone-btf ([`e210012`](https://github.com/aya-rs/aya/commit/e21001226f)) - Mutate BTF in-place without clone ([`098d436`](https://github.com/aya-rs/aya/commit/098d4364bd)) - Merge pull request #726 from aya-rs/btf-iter-alloc ([`761e4dd`](https://github.com/aya-rs/aya/commit/761e4ddbe3)) - Use Self instead of restating the type ([`826e0e5`](https://github.com/aya-rs/aya/commit/826e0e5050)) - Avoid multiple vector allocations ([`2a054d7`](https://github.com/aya-rs/aya/commit/2a054d76ae)) - Merge pull request #721 from dave-tucker/fix-funcinfo ([`1979da9`](https://github.com/aya-rs/aya/commit/1979da92a7)) - Fix (func|line)_info multiple progs in section ([`79ea64c`](https://github.com/aya-rs/aya/commit/79ea64ca7f)) - Merge pull request #720 from dave-tucker/programsection-noname ([`e915379`](https://github.com/aya-rs/aya/commit/e9153792f1)) - Remove name from ProgramSection ([`cca9b8f`](https://github.com/aya-rs/aya/commit/cca9b8f1a7)) - Merge pull request #711 from dave-tucker/sleepable ([`77e9603`](https://github.com/aya-rs/aya/commit/77e9603976)) - Propagate sleepable into ProgramSection ([`677e7bd`](https://github.com/aya-rs/aya/commit/677e7bda4a)) - Merge pull request #413 from dave-tucker/fix-names-once-and-for-all ([`e833a71`](https://github.com/aya-rs/aya/commit/e833a71b02)) - Merge pull request #704 from aya-rs/better-panic ([`868a9b0`](https://github.com/aya-rs/aya/commit/868a9b00b3)) - Find programs using the symbol table ([`bf7fdff`](https://github.com/aya-rs/aya/commit/bf7fdff1ce)) - Better panic messages ([`17f25a6`](https://github.com/aya-rs/aya/commit/17f25a6793)) - Merge pull request #699 from aya-rs/cache-again-god-damn-it ([`e95f76a`](https://github.com/aya-rs/aya/commit/e95f76a5b3)) - Do not escape newlines on Err(LoadError).unwrap() ([`8961be9`](https://github.com/aya-rs/aya/commit/8961be9526)) - Merge pull request #667 from vadorovsky/workspace-dependencies ([`f554d42`](https://github.com/aya-rs/aya/commit/f554d42105)) - Define dependencies on the workspace level ([`96fa08b`](https://github.com/aya-rs/aya/commit/96fa08bd82)) - Merge pull request #665 from aya-rs/dead-code-rm ([`893ab76`](https://github.com/aya-rs/aya/commit/893ab76afa)) - Avoid an allocation ([`6f2a8c8`](https://github.com/aya-rs/aya/commit/6f2a8c8a5c)) - Remove dead code ([`d71d1e1`](https://github.com/aya-rs/aya/commit/d71d1e1993)) - Merge pull request #656 from aya-rs/kernel-version-fml ([`232cd45`](https://github.com/aya-rs/aya/commit/232cd45e41)) - Replace matches with assert_matches ([`961f45d`](https://github.com/aya-rs/aya/commit/961f45da37)) - Merge pull request #650 from aya-rs/test-cleanup ([`61608e6`](https://github.com/aya-rs/aya/commit/61608e6458)) - Run tests with powerset of features ([`8e9712a`](https://github.com/aya-rs/aya/commit/8e9712ac02)) - Merge pull request #648 from aya-rs/clippy-more ([`a840a17`](https://github.com/aya-rs/aya/commit/a840a17308)) - Clippy over tests and integration-ebpf ([`e621a09`](https://github.com/aya-rs/aya/commit/e621a09181)) - Merge pull request #643 from aya-rs/procfs ([`6e9aba5`](https://github.com/aya-rs/aya/commit/6e9aba55fe)) - Remove verifier log special case ([`b5ebcb7`](https://github.com/aya-rs/aya/commit/b5ebcb7cc5)) - Merge pull request #641 from aya-rs/logger-messages-plz ([`4c0983b`](https://github.com/aya-rs/aya/commit/4c0983bca9)) - Hide details of VerifierLog ([`6b94b20`](https://github.com/aya-rs/aya/commit/6b94b2080d)) - Use procfs crate for kernel version parsing ([`b611038`](https://github.com/aya-rs/aya/commit/b611038d5b)) - Merge pull request #642 from aya-rs/less-strings ([`32be47a`](https://github.com/aya-rs/aya/commit/32be47a23b)) - Don't allocate static strings ([`27120b3`](https://github.com/aya-rs/aya/commit/27120b328a)) - Merge pull request #635 from marysaka/misc/aya-obj-enum-public ([`5c86b7e`](https://github.com/aya-rs/aya/commit/5c86b7ee95)) - Aya-obj: Make it possible to externally assemble BtfEnum ([`d9dfd94`](https://github.com/aya-rs/aya/commit/d9dfd94f29)) - Merge pull request #531 from dave-tucker/probe-cookie ([`bc0d021`](https://github.com/aya-rs/aya/commit/bc0d02143f)) - Make Features part of the public API ([`47f764c`](https://github.com/aya-rs/aya/commit/47f764c191)) - Merge pull request #632 from marysaka/feat/global-data-optional ([`b2737d5`](https://github.com/aya-rs/aya/commit/b2737d5b0d)) - Allow global value to be optional ([`93435fc`](https://github.com/aya-rs/aya/commit/93435fc854)) - Merge pull request #626 from aya-rs/dependabot/cargo/hashbrown-0.14 ([`26c6b92`](https://github.com/aya-rs/aya/commit/26c6b92ef1)) - Update hashbrown requirement from 0.13 to 0.14 ([`f5f8083`](https://github.com/aya-rs/aya/commit/f5f8083441)) - Merge pull request #623 from aya-rs/dependabot/cargo/rbpf-0.2.0 ([`53ec1f2`](https://github.com/aya-rs/aya/commit/53ec1f23ea)) - Update rbpf requirement from 0.1.0 to 0.2.0 ([`fa3dd4b`](https://github.com/aya-rs/aya/commit/fa3dd4bef2)) - Merge pull request #563 from marysaka/fix/reloc-less-strict ([`85ad019`](https://github.com/aya-rs/aya/commit/85ad0197e0)) - Make relocations less strict ([`35eaa50`](https://github.com/aya-rs/aya/commit/35eaa50736)) - Merge pull request #602 from marysaka/fix/btf-reloc-all-functions ([`3a9a54f`](https://github.com/aya-rs/aya/commit/3a9a54fd9b)) - Merge pull request #616 from nak3/fix-bump ([`3211d2c`](https://github.com/aya-rs/aya/commit/3211d2c928)) - Apply BTF relocations to all functions ([`c4e721f`](https://github.com/aya-rs/aya/commit/c4e721f3d3)) - [codegen] Update libbpf to f7eb43b90f4c8882edf6354f8585094f8f3aade0Update libbpf to f7eb43b90f ([`0bc886f`](https://github.com/aya-rs/aya/commit/0bc886f163)) - Merge pull request #585 from probulate/tag-len-value ([`5165bf2`](https://github.com/aya-rs/aya/commit/5165bf2f99)) - Merge pull request #605 from marysaka/fix/global-data-reloc-ancient-kernels ([`9c437aa`](https://github.com/aya-rs/aya/commit/9c437aafd9)) - Merge pull request #604 from marysaka/fix/section-kind-from-str ([`3a9058e`](https://github.com/aya-rs/aya/commit/3a9058e762)) - Do not create data maps on kernel without global data support ([`591e212`](https://github.com/aya-rs/aya/commit/591e21267a)) - Fix ProgramSection::from_str for bss and rodata sections ([`18b3d75`](https://github.com/aya-rs/aya/commit/18b3d75d09)) - Build tests with all features ([`4e2f832`](https://github.com/aya-rs/aya/commit/4e2f8322cc)) - Move program's functions to the same map ([`9e1109b`](https://github.com/aya-rs/aya/commit/9e1109b3ce)) - Merge pull request #597 from nak3/test-clippy ([`7cd1c64`](https://github.com/aya-rs/aya/commit/7cd1c642e3)) - Drop unnecessary mut ([`e67025b`](https://github.com/aya-rs/aya/commit/e67025b66f)) - Merge pull request #577 from aya-rs/dependabot/cargo/object-0.31 ([`deb054a`](https://github.com/aya-rs/aya/commit/deb054afa4)) - Merge pull request #545 from epompeii/lsm_sleepable ([`120b59d`](https://github.com/aya-rs/aya/commit/120b59dd2e)) - Update object requirement from 0.30 to 0.31 ([`4c78f7f`](https://github.com/aya-rs/aya/commit/4c78f7f1a0)) - Merge pull request #586 from probulate/no-std-inversion ([`45efa63`](https://github.com/aya-rs/aya/commit/45efa6384f)) - Flip feature "no_std" to feature "std" ([`33a0a2b`](https://github.com/aya-rs/aya/commit/33a0a2b604)) - Merge branch 'aya-rs:main' into lsm_sleepable ([`1f2006b`](https://github.com/aya-rs/aya/commit/1f2006bfde)) - Merge pull request #583 from 0xrawsec/fix-builtin-linkage ([`b2d5059`](https://github.com/aya-rs/aya/commit/b2d5059ac2)) - - comment changed to be more precise - adapted test to be more readable ([`1464bdc`](https://github.com/aya-rs/aya/commit/1464bdc1d4)) - Added memmove, memcmp to the list of function changed to BTF_FUNC_STATIC ([`72c1572`](https://github.com/aya-rs/aya/commit/72c1572178)) - Fixed indent ([`a51c9bc`](https://github.com/aya-rs/aya/commit/a51c9bc532)) - Removed useless line break and comments ([`5b4fc9e`](https://github.com/aya-rs/aya/commit/5b4fc9ea93)) - Add debug messages ([`74bc754`](https://github.com/aya-rs/aya/commit/74bc754862)) - Merge pull request #582 from marysaka/feature/no-kern-read-sanitizer ([`b5c2928`](https://github.com/aya-rs/aya/commit/b5c2928b0e)) - Add sanitize code for kernels without bpf_probe_read_kernel ([`1132b6e`](https://github.com/aya-rs/aya/commit/1132b6e01b)) - Fixed BTF linkage of memset and memcpy to static ([`4e41da6`](https://github.com/aya-rs/aya/commit/4e41da6a86)) - Merge pull request #581 from marysaka/fix/datasec-struct-conversion ([`858f77b`](https://github.com/aya-rs/aya/commit/858f77bf2c)) - Fix DATASEC to STRUCT conversion ([`4e33fa0`](https://github.com/aya-rs/aya/commit/4e33fa011e)) - Merge pull request #572 from alessandrod/reloc-fixes ([`542ada3`](https://github.com/aya-rs/aya/commit/542ada3fe7)) - Support relocations across multiple text sections + fixes ([`93ac3e9`](https://github.com/aya-rs/aya/commit/93ac3e94bc)) - Change two drain() calls to into_iter() ([`b25a089`](https://github.com/aya-rs/aya/commit/b25a089819)) - Aya, aya-obj: refactor map relocations ([`401ea5e`](https://github.com/aya-rs/aya/commit/401ea5e848)) - Rework `maps` section parsing ([`5c4f1d6`](https://github.com/aya-rs/aya/commit/5c4f1d69a6)) - Review ([`85714d5`](https://github.com/aya-rs/aya/commit/85714d5cf3)) - Macro ([`6dfb9d8`](https://github.com/aya-rs/aya/commit/6dfb9d82af)) - Obj ([`6a25d4d`](https://github.com/aya-rs/aya/commit/6a25d4ddec)) - Fix compilation with nightly ([`dfbe120`](https://github.com/aya-rs/aya/commit/dfbe1207c1)) - Merge pull request #537 from aya-rs/codegen ([`8684a57`](https://github.com/aya-rs/aya/commit/8684a5783d)) - [codegen] Update libbpf to a41e6ef3251cba858021b90c33abb9efdb17f575Update libbpf to a41e6ef325 ([`24f15ea`](https://github.com/aya-rs/aya/commit/24f15ea25f)) - More discrete feature logging ([`7479c1d`](https://github.com/aya-rs/aya/commit/7479c1dd6c)) - Make features a lazy_static ([`ce22ca6`](https://github.com/aya-rs/aya/commit/ce22ca668f)) - Merge pull request #519 from dave-tucker/frags ([`bc83f20`](https://github.com/aya-rs/aya/commit/bc83f208b1)) - Add multibuffer support for XDP ([`376c486`](https://github.com/aya-rs/aya/commit/376c486400)) - Add support for multibuffer programs ([`a18693b`](https://github.com/aya-rs/aya/commit/a18693b42d)) - Merge pull request #453 from alessandrod/btf-kind-enum64 ([`e8e2767`](https://github.com/aya-rs/aya/commit/e8e276730e)) - Btf: add support for BTF_KIND_ENUM64 ([`9a6f814`](https://github.com/aya-rs/aya/commit/9a6f8143a1)) - Merge pull request #501 from alessandrod/fix-enum32-relocs ([`f81b1b9`](https://github.com/aya-rs/aya/commit/f81b1b9f3e)) - Btf: fix relocations for signed enums (32 bits) ([`4482db4`](https://github.com/aya-rs/aya/commit/4482db42d8)) - Btf: switch ComputedRelocationValue::value to u64 ([`d6b976c`](https://github.com/aya-rs/aya/commit/d6b976c6f1)) - Fix lints ([`9f4ef6f`](https://github.com/aya-rs/aya/commit/9f4ef6f67d)) - Merge pull request #487 from vadorovsky/new-map-types ([`42c4a8b`](https://github.com/aya-rs/aya/commit/42c4a8be7c)) - Add new map types ([`3d03c8a`](https://github.com/aya-rs/aya/commit/3d03c8a8e0)) - Merge pull request #483 from aya-rs/codegen ([`0399991`](https://github.com/aya-rs/aya/commit/0399991383)) - Update `BPF_MAP_TYPE_CGROUP_STORAGE` name to `BPF_MAP_TYPE_CGRP_STORAGE` ([`cb28533`](https://github.com/aya-rs/aya/commit/cb28533e2f)) - [codegen] Update libbpf to 3423d5e7cdab356d115aef7f987b4a1098ede448Update libbpf to 3423d5e7cd ([`5d13fd5`](https://github.com/aya-rs/aya/commit/5d13fd5aca)) - Merge pull request #475 from yesh0/aya-obj ([`897957a`](https://github.com/aya-rs/aya/commit/897957ac84)) - Update documentation and versioning info ([`9c451a3`](https://github.com/aya-rs/aya/commit/9c451a3357)) - Add documentation on program names ([`772af17`](https://github.com/aya-rs/aya/commit/772af170ae)) - Fix rustfmt diffs and typos ([`9ec3447`](https://github.com/aya-rs/aya/commit/9ec3447e89)) - Add no_std feature ([`30f1fab`](https://github.com/aya-rs/aya/commit/30f1fabc05)) - Add integration tests against rbpf ([`311ead6`](https://github.com/aya-rs/aya/commit/311ead6760)) - Add basic documentation to public members ([`e52497c`](https://github.com/aya-rs/aya/commit/e52497cb9c)) - Migrate aya::obj into a separate crate ([`ac49827`](https://github.com/aya-rs/aya/commit/ac49827e20)) - Migrate bindgen destination ([`81bc307`](https://github.com/aya-rs/aya/commit/81bc307dce))