cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sysfs_btf.c (1111B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Provide kernel BTF information for introspection and use by eBPF tools.
      4 */
      5#include <linux/kernel.h>
      6#include <linux/module.h>
      7#include <linux/kobject.h>
      8#include <linux/init.h>
      9#include <linux/sysfs.h>
     10
     11/* See scripts/link-vmlinux.sh, gen_btf() func for details */
     12extern char __weak __start_BTF[];
     13extern char __weak __stop_BTF[];
     14
     15static ssize_t
     16btf_vmlinux_read(struct file *file, struct kobject *kobj,
     17		 struct bin_attribute *bin_attr,
     18		 char *buf, loff_t off, size_t len)
     19{
     20	memcpy(buf, __start_BTF + off, len);
     21	return len;
     22}
     23
     24static struct bin_attribute bin_attr_btf_vmlinux __ro_after_init = {
     25	.attr = { .name = "vmlinux", .mode = 0444, },
     26	.read = btf_vmlinux_read,
     27};
     28
     29struct kobject *btf_kobj;
     30
     31static int __init btf_vmlinux_init(void)
     32{
     33	bin_attr_btf_vmlinux.size = __stop_BTF - __start_BTF;
     34
     35	if (!__start_BTF || bin_attr_btf_vmlinux.size == 0)
     36		return 0;
     37
     38	btf_kobj = kobject_create_and_add("btf", kernel_kobj);
     39	if (!btf_kobj)
     40		return -ENOMEM;
     41
     42	return sysfs_create_bin_file(btf_kobj, &bin_attr_btf_vmlinux);
     43}
     44
     45subsys_initcall(btf_vmlinux_init);