linux/tools/testing/selftests/bpf/progs/linked_vars1.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/* Copyright (c) 2021 Facebook */
   3
   4#include "vmlinux.h"
   5#include <bpf/bpf_helpers.h>
   6#include <bpf/bpf_tracing.h>
   7
   8extern int LINUX_KERNEL_VERSION __kconfig;
   9/* this weak extern will be strict due to the other file's strong extern */
  10extern bool CONFIG_BPF_SYSCALL __kconfig __weak;
  11extern const void bpf_link_fops __ksym __weak;
  12
  13int input_bss1;
  14int input_data1 = 1;
  15const volatile int input_rodata1 = 11;
  16
  17int input_bss_weak __weak;
  18/* these two definitions should win */
  19int input_data_weak __weak = 10;
  20const volatile int input_rodata_weak __weak = 100;
  21
  22extern int input_bss2;
  23extern int input_data2;
  24extern const int input_rodata2;
  25
  26int output_bss1;
  27int output_data1;
  28int output_rodata1;
  29
  30long output_sink1;
  31
  32static __noinline int get_bss_res(void)
  33{
  34        /* just make sure all the relocations work against .text as well */
  35        return input_bss1 + input_bss2 + input_bss_weak;
  36}
  37
  38SEC("raw_tp/sys_enter")
  39int BPF_PROG(handler1)
  40{
  41        output_bss1 = get_bss_res();
  42        output_data1 = input_data1 + input_data2 + input_data_weak;
  43        output_rodata1 = input_rodata1 + input_rodata2 + input_rodata_weak;
  44
  45        /* make sure we actually use above special externs, otherwise compiler
  46         * will optimize them out
  47         */
  48        output_sink1 = LINUX_KERNEL_VERSION
  49                       + CONFIG_BPF_SYSCALL
  50                       + (long)&bpf_link_fops;
  51        return 0;
  52}
  53
  54char LICENSE[] SEC("license") = "GPL";
  55