108 lines · 3.1 KB · C
RawDownload
// SPDX-License-Identifier: GPL-2.0/* * Non-trivial C macros cannot be used in Rust. Similarly, inlined C functions * cannot be called either. This file explicitly creates functions ("helpers") * that wrap those so that they can be called from Rust. * * Sorted alphabetically. */ #include <linux/compiler_types.h> #ifdef __BINDGEN__// Omit `inline` for bindgen as it ignores inline functions.#define __rust_helper#else// The helper functions are all inline functions.//// We use `__always_inline` here to bypass LLVM inlining checks, in case the// helpers are inlined directly into Rust CGUs.//// The LLVM inlining checks are false positives:// * LLVM doesn't want to inline functions compiled with//   `-fno-delete-null-pointer-checks` with code compiled without.//   The C CGUs all have this enabled and Rust CGUs don't. Inlining is okay//   since this is one of the hardening features that does not change the ABI,//   and we shouldn't have null pointer dereferences in these helpers.// * LLVM doesn't want to inline functions with different list of builtins. C//   side has `-fno-builtin-wcslen`; `wcslen` is not a Rust builtin, so they//   should be compatible, but LLVM does not perform inlining due to attributes//   mismatch.// * clang and Rust doesn't have the exact target string. Clang generates//   `+cmov,+cx8,+fxsr` but Rust doesn't enable them (in fact, Rust will//   complain if `-Ctarget-feature=+cmov,+cx8,+fxsr` is used). x86-64 always//   enable these features, so they are in fact the same target string, but//   LLVM doesn't understand this and so inlining is inhibited. This can be//   bypassed with `--ignore-tti-inline-compatible`, but this is a hidden//   option.#define __rust_helper __always_inline#endif #include "atomic.c"#include "atomic_ext.c"#include "auxiliary.c"#include "barrier.c"#include "binder.c"#include "bitmap.c"#include "bitops.c"#include "blk.c"#include "bug.c"#include "build_assert.c"#include "build_bug.c"#include "clk.c"#include "completion.c"#include "cpu.c"#include "cpufreq.c"#include "cpumask.c"#include "cred.c"#include "device.c"#include "dma.c"#ifdef CONFIG_DMA_SHARED_BUFFER#include "dma-resv.c"#endif#include "drm.c"#include "drm_gpuvm.c"#include "err.c"#include "fs.c"#include "fwctl.c"#include "gpu.c"#include "interrupt.c"#include "io.c"#include "irq.c"#include "jump_label.c"#include "kunit.c"#include "list.c"#include "maple_tree.c"#include "mm.c"#include "mutex.c"#include "net/genetlink.c"#include "of.c"#include "page.c"#include "pci.c"#include "pid_namespace.c"#include "platform.c"#include "poll.c"#include "processor.c"#include "property.c"#include "pwm.c"#include "rbtree.c"#include "rcu.c"#include "refcount.c"#include "regulator.c"#include "scatterlist.c"#include "security.c"#include "serdev.c"#include "signal.c"#include "slab.c"#include "spinlock.c"#include "string.c"#include "srcu.c"#include "sync.c"#include "task.c"#include "time.c"#include "uaccess.c"#include "usb.c"#include "vmalloc.c"#include "wait.c"#include "workqueue.c"#include "xarray.c"