18b1cb1c9SAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0 28b1cb1c9SAndrii Nakryiko // Copyright (c) 2019 Facebook 38b1cb1c9SAndrii Nakryiko 48b1cb1c9SAndrii Nakryiko #include <linux/bpf.h> 58b1cb1c9SAndrii Nakryiko #include <stdint.h> 63e689141SToke Høiland-Jørgensen #include <bpf/bpf_helpers.h> 73e689141SToke Høiland-Jørgensen #include <bpf/bpf_core_read.h> 88b1cb1c9SAndrii Nakryiko 98b1cb1c9SAndrii Nakryiko char _license[] SEC("license") = "GPL"; 108b1cb1c9SAndrii Nakryiko 11393cdfbeSAndrii Nakryiko struct { 128b1cb1c9SAndrii Nakryiko char in[256]; 138b1cb1c9SAndrii Nakryiko char out[256]; 14393cdfbeSAndrii Nakryiko } data = {}; 158b1cb1c9SAndrii Nakryiko 168b1cb1c9SAndrii Nakryiko struct core_reloc_bitfields { 178b1cb1c9SAndrii Nakryiko /* unsigned bitfields */ 188b1cb1c9SAndrii Nakryiko uint8_t ub1: 1; 198b1cb1c9SAndrii Nakryiko uint8_t ub2: 2; 208b1cb1c9SAndrii Nakryiko uint32_t ub7: 7; 218b1cb1c9SAndrii Nakryiko /* signed bitfields */ 228b1cb1c9SAndrii Nakryiko int8_t sb4: 4; 238b1cb1c9SAndrii Nakryiko int32_t sb20: 20; 248b1cb1c9SAndrii Nakryiko /* non-bitfields */ 258b1cb1c9SAndrii Nakryiko uint32_t u32; 268b1cb1c9SAndrii Nakryiko int32_t s32; 278b1cb1c9SAndrii Nakryiko }; 288b1cb1c9SAndrii Nakryiko 298b1cb1c9SAndrii Nakryiko /* bitfield read results, all as plain integers */ 308b1cb1c9SAndrii Nakryiko struct core_reloc_bitfields_output { 318b1cb1c9SAndrii Nakryiko int64_t ub1; 328b1cb1c9SAndrii Nakryiko int64_t ub2; 338b1cb1c9SAndrii Nakryiko int64_t ub7; 348b1cb1c9SAndrii Nakryiko int64_t sb4; 358b1cb1c9SAndrii Nakryiko int64_t sb20; 368b1cb1c9SAndrii Nakryiko int64_t u32; 378b1cb1c9SAndrii Nakryiko int64_t s32; 388b1cb1c9SAndrii Nakryiko }; 398b1cb1c9SAndrii Nakryiko 408b1cb1c9SAndrii Nakryiko SEC("raw_tracepoint/sys_enter") test_core_bitfields(void * ctx)418b1cb1c9SAndrii Nakryikoint test_core_bitfields(void *ctx) 428b1cb1c9SAndrii Nakryiko { 438b1cb1c9SAndrii Nakryiko struct core_reloc_bitfields *in = (void *)&data.in; 448b1cb1c9SAndrii Nakryiko struct core_reloc_bitfields_output *out = (void *)&data.out; 458b1cb1c9SAndrii Nakryiko 46ed578021SAndrii Nakryiko out->ub1 = BPF_CORE_READ_BITFIELD_PROBED(in, ub1); 47ed578021SAndrii Nakryiko out->ub2 = BPF_CORE_READ_BITFIELD_PROBED(in, ub2); 48ed578021SAndrii Nakryiko out->ub7 = BPF_CORE_READ_BITFIELD_PROBED(in, ub7); 49ed578021SAndrii Nakryiko out->sb4 = BPF_CORE_READ_BITFIELD_PROBED(in, sb4); 50ed578021SAndrii Nakryiko out->sb20 = BPF_CORE_READ_BITFIELD_PROBED(in, sb20); 51ed578021SAndrii Nakryiko out->u32 = BPF_CORE_READ_BITFIELD_PROBED(in, u32); 52ed578021SAndrii Nakryiko out->s32 = BPF_CORE_READ_BITFIELD_PROBED(in, s32); 538b1cb1c9SAndrii Nakryiko 548b1cb1c9SAndrii Nakryiko return 0; 558b1cb1c9SAndrii Nakryiko } 568b1cb1c9SAndrii Nakryiko 57