1// SPDX-License-Identifier: GPL-2.0 2/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ 3#include <vmlinux.h> 4#include <bpf/bpf_helpers.h> 5#include <bpf/bpf_tracing.h> 6#include "../bpf_testmod/bpf_testmod.h" 7 8char _license[] SEC("license") = "GPL"; 9 10#define TRAMP(x) \ 11 SEC("struct_ops/tramp_" #x) \ 12 int BPF_PROG(tramp_ ## x, int a) \ 13 { \ 14 return a; \ 15 } 16 17TRAMP(1) 18TRAMP(2) 19TRAMP(3) 20TRAMP(4) 21TRAMP(5) 22TRAMP(6) 23TRAMP(7) 24TRAMP(8) 25TRAMP(9) 26TRAMP(10) 27TRAMP(11) 28TRAMP(12) 29TRAMP(13) 30TRAMP(14) 31TRAMP(15) 32TRAMP(16) 33TRAMP(17) 34TRAMP(18) 35TRAMP(19) 36TRAMP(20) 37TRAMP(21) 38TRAMP(22) 39TRAMP(23) 40TRAMP(24) 41TRAMP(25) 42TRAMP(26) 43TRAMP(27) 44TRAMP(28) 45TRAMP(29) 46TRAMP(30) 47TRAMP(31) 48TRAMP(32) 49TRAMP(33) 50TRAMP(34) 51TRAMP(35) 52TRAMP(36) 53TRAMP(37) 54TRAMP(38) 55TRAMP(39) 56TRAMP(40) 57 58#define F_TRAMP(x) .tramp_ ## x = (void *)tramp_ ## x 59 60SEC(".struct_ops.link") 61struct bpf_testmod_ops multi_pages = { 62 F_TRAMP(1), 63 F_TRAMP(2), 64 F_TRAMP(3), 65 F_TRAMP(4), 66 F_TRAMP(5), 67 F_TRAMP(6), 68 F_TRAMP(7), 69 F_TRAMP(8), 70 F_TRAMP(9), 71 F_TRAMP(10), 72 F_TRAMP(11), 73 F_TRAMP(12), 74 F_TRAMP(13), 75 F_TRAMP(14), 76 F_TRAMP(15), 77 F_TRAMP(16), 78 F_TRAMP(17), 79 F_TRAMP(18), 80 F_TRAMP(19), 81 F_TRAMP(20), 82 F_TRAMP(21), 83 F_TRAMP(22), 84 F_TRAMP(23), 85 F_TRAMP(24), 86 F_TRAMP(25), 87 F_TRAMP(26), 88 F_TRAMP(27), 89 F_TRAMP(28), 90 F_TRAMP(29), 91 F_TRAMP(30), 92 F_TRAMP(31), 93 F_TRAMP(32), 94 F_TRAMP(33), 95 F_TRAMP(34), 96 F_TRAMP(35), 97 F_TRAMP(36), 98 F_TRAMP(37), 99 F_TRAMP(38), 100 F_TRAMP(39), 101 F_TRAMP(40), 102}; 103