linux/tools/testing/selftests/bpf/progs/test_core_reloc_existence.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2// Copyright (c) 2019 Facebook
   3
   4#include <linux/bpf.h>
   5#include <stdint.h>
   6#include <bpf/bpf_helpers.h>
   7#include <bpf/bpf_core_read.h>
   8
   9char _license[] SEC("license") = "GPL";
  10
  11struct {
  12        char in[256];
  13        char out[256];
  14} data = {};
  15
  16struct core_reloc_existence_output {
  17        int a_exists;
  18        int a_value;
  19        int b_exists;
  20        int b_value;
  21        int c_exists;
  22        int c_value;
  23        int arr_exists;
  24        int arr_value;
  25        int s_exists;
  26        int s_value;
  27};
  28
  29struct core_reloc_existence {
  30        struct {
  31                int x;
  32        } s;
  33        int arr[1];
  34        int a;
  35        struct {
  36                int b;
  37        };
  38        int c;
  39};
  40
  41SEC("raw_tracepoint/sys_enter")
  42int test_core_existence(void *ctx)
  43{
  44        struct core_reloc_existence *in = (void *)&data.in;
  45        struct core_reloc_existence_output *out = (void *)&data.out;
  46
  47        out->a_exists = bpf_core_field_exists(in->a);
  48        if (bpf_core_field_exists(in->a))
  49                out->a_value = BPF_CORE_READ(in, a);
  50        else
  51                out->a_value = 0xff000001u;
  52
  53        out->b_exists = bpf_core_field_exists(in->b);
  54        if (bpf_core_field_exists(in->b))
  55                out->b_value = BPF_CORE_READ(in, b);
  56        else
  57                out->b_value = 0xff000002u;
  58
  59        out->c_exists = bpf_core_field_exists(in->c);
  60        if (bpf_core_field_exists(in->c))
  61                out->c_value = BPF_CORE_READ(in, c);
  62        else
  63                out->c_value = 0xff000003u;
  64
  65        out->arr_exists = bpf_core_field_exists(in->arr);
  66        if (bpf_core_field_exists(in->arr))
  67                out->arr_value = BPF_CORE_READ(in, arr[0]);
  68        else
  69                out->arr_value = 0xff000004u;
  70
  71        out->s_exists = bpf_core_field_exists(in->s);
  72        if (bpf_core_field_exists(in->s))
  73                out->s_value = BPF_CORE_READ(in, s.x);
  74        else
  75                out->s_value = 0xff000005u;
  76
  77        return 0;
  78}
  79
  80