Allow BPF structure passing and returning (#2100)
* Add BPF struct passing and returning tests
This commit is contained in:
17
programs/bpf/c/src/struct_pass.c
Normal file
17
programs/bpf/c/src/struct_pass.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <solana_sdk.h>
|
||||
|
||||
struct foo {const uint8_t *input;};
|
||||
void foo(const uint8_t *input, struct foo foo) ;
|
||||
|
||||
extern bool entrypoint(const uint8_t *input) {
|
||||
struct foo f;
|
||||
f.input = input;
|
||||
foo(input, f);
|
||||
return true;
|
||||
}
|
||||
|
||||
void foo(const uint8_t *input, struct foo foo) {
|
||||
sol_log_64(0, 0, 0, (uint64_t)input, (uint64_t)foo.input);
|
||||
sol_assert(input == foo.input);
|
||||
}
|
||||
|
18
programs/bpf/c/src/struct_ret.c
Normal file
18
programs/bpf/c/src/struct_ret.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include <solana_sdk.h>
|
||||
|
||||
struct foo {const uint8_t *input;};
|
||||
struct foo bar(const uint8_t *input);
|
||||
|
||||
extern bool entrypoint(const uint8_t *input) {
|
||||
struct foo foo = bar(input);
|
||||
sol_log_64(0, 0, 0, (uint64_t)input, (uint64_t)foo.input);
|
||||
sol_assert(input == foo.input);
|
||||
return true;
|
||||
}
|
||||
|
||||
struct foo bar(const uint8_t *input) {
|
||||
struct foo foo;
|
||||
foo.input = input;
|
||||
return foo;
|
||||
}
|
||||
|
@ -18,6 +18,9 @@ fn main() {
|
||||
println!("cargo:rerun-if-changed=../../bpf/c/src/bench_alu.c");
|
||||
println!("cargo:rerun-if-changed=../../bpf/c/src/move_funds.c");
|
||||
println!("cargo:rerun-if-changed=../../bpf/c/src/noop.c");
|
||||
println!("cargo:rerun-if-changed=../../bpf/c/src/noop++.c");
|
||||
println!("cargo:rerun-if-changed=../../bpf/c/src/struct_pass.c");
|
||||
println!("cargo:rerun-if-changed=../../bpf/c/src/struct_ret.c");
|
||||
println!("cargo:warning=(not a warning) Compiling C-based BPF programs");
|
||||
let status = Command::new("make")
|
||||
.current_dir("../../bpf/c")
|
||||
|
Reference in New Issue
Block a user