-
Notifications
You must be signed in to change notification settings - Fork 286
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #889 from dave-tucker/breaking-changes
docs: Document breaking changes
- Loading branch information
Showing
1 changed file
with
97 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
# Breaking Changes | ||
|
||
This document contains a list of breaking changes in each version and some notes | ||
to help migrate between versions. It is compiled manually from the commit | ||
history and changelog. We also tag PRs on github with a [breaking change] label. | ||
|
||
[breaking change]: (https://github.com/aya-rs/aya/issues?q=label%3A%22breaking+change%22) | ||
|
||
## Summary | ||
|
||
- [v0.12.0](#v0120) | ||
- In `aya::Bpf::programs`, `name` uses the function name from the ELF file. | ||
|
||
## v0.12.0 | ||
|
||
### In `aya::Bpf::programs`, `name` uses the function name from the ELF file | ||
|
||
In previous versions, the `name` parameter of `aya::Bpf::programs` was | ||
derived from the ELF section name. If you were using `aya-bpf`, this was sensible | ||
since our macros took care of appending the function name to the section name, | ||
resulting in a section name like `kprobe/my_function`. However, loading this | ||
program using libbpf > 1.0 would fail due the section name not following the | ||
newly enforced [naming convention]. | ||
|
||
Likewise, loading eBPF programs written in C using Aya was also problematic. | ||
Given the following C program: | ||
|
||
```c | ||
SEC("kprobe") | ||
int my_function(struct pt_regs *ctx) { | ||
return 0; | ||
} | ||
``` | ||
Loading this program using Aya would require the following: | ||
```rust | ||
let bpf = Bpf::load(&program)?; | ||
let my_function = bpf.program("kprobe")?; | ||
``` | ||
|
||
This was not intuitive and was a frequent source of confusion. | ||
|
||
To solve this, Aya was changed to resolve function names from the ELF files | ||
symbol table. Therefore, if your function is defined as: | ||
|
||
```rust | ||
#[kprobe] | ||
fn my_function(_ctx: KprobeContext) -> i32 { | ||
0 | ||
} | ||
``` | ||
|
||
Or in C: | ||
|
||
```c | ||
SEC("kprobe") | ||
int my_function(struct pt_regs *ctx) { | ||
return 0; | ||
} | ||
``` | ||
Then you should load it using: | ||
```rust | ||
let bpf = Bpf::load(&program)?; | ||
let my_function = bpf.program("my_function")?; | ||
``` | ||
|
||
Migration is straightforward. Simply replace the `name` parameter in | ||
`Bpf::programs` with the function name from the ELF file. | ||
|
||
If you are using `aya-bpf`, you should update to the latest (git) | ||
version and recompile your programs. The name argument inside our macros | ||
has been deprecated and should therefore be removed. | ||
|
||
Given the following: | ||
|
||
```rust | ||
#[kprobe(name="another_name")] | ||
fn some_name(_ctx: KprobeContext) -> i32 { | ||
0 | ||
} | ||
``` | ||
|
||
You would update it to: | ||
|
||
```rust | ||
#[kprobe] | ||
fn another_name(_ctx: KprobeContext) -> i32 { | ||
0 | ||
} | ||
``` | ||
|
||
Note here that changing the exported function name is not supported anymore. | ||
|
||
[naming convention]: https://docs.kernel.org/bpf/libbpf/program_types.html |