1 .. SPDX-License-Identifier: GPL-2.0 2 3 .. include:: ../disclaimer-zh_CN.rst 4 5 :Original: Documentation/kbuild/gcc-plugins.rs 6 :Translator: 慕冬亮 Dongliang Mu <dzm91@hust 7 8 ================ 9 GCC 插件基础设施 10 ================ 11 12 13 介绍 14 ==== 15 16 GCC 插件是为编译器提供额外功能的 17 我们可以在编译过程中通过回调 [2] 18 (译者注:Pass 是编译器所采用的 19 来分析、修改和添加更多的代码。 20 21 内核的 GCC 插件基础设施支持构建 22 C++ 编译器编译。 23 24 目前 GCC 插件基础设施只支持一些 25 GCC 插件的架构。 26 27 这个基础设施是从 grsecurity [6]_ 和 28 29 -- 30 31 .. [1] https://gcc.gnu.org/onlinedocs/gccint/P 32 .. [2] https://gcc.gnu.org/onlinedocs/gccint/P 33 .. [3] https://gcc.gnu.org/onlinedocs/gccint/G 34 .. [4] https://gcc.gnu.org/onlinedocs/gccint/I 35 .. [5] https://gcc.gnu.org/onlinedocs/gccint/R 36 .. [6] https://grsecurity.net/ 37 .. [7] https://pax.grsecurity.net/ 38 39 40 目的 41 ==== 42 43 GCC 插件的设计目的是提供一个用于 44 一旦它们的实用性得到验证,这些 45 支持的 GCC 版本都支持这些功能后 46 47 具体来说,新插件应该只实现上游 48 49 当 Clang 中存在 GCC 中不存在的某项 50 是作为内核专用的 GCC 插件),以 51 52 类似的,如果 GCC 插件提供的功能 53 努力将该功能上传到 GCC(和 Clang) 54 55 在上游 GCC 提供了某项功能后,该 56 一旦所有内核支持的 GCC 版本都提 57 58 59 文件 60 ==== 61 62 **$(src)/scripts/gcc-plugins** 63 64 这是 GCC 插件的目录。 65 66 **$(src)/scripts/gcc-plugins/gcc-common.h** 67 68 这是 GCC 插件的兼容性头文件 69 应始终包含它,而不是单独 70 71 **$(src)/scripts/gcc-plugins/gcc-generate-gimp 72 $(src)/scripts/gcc-plugins/gcc-generate-ipa-pa 73 $(src)/scripts/gcc-plugins/gcc-generate-simple 74 $(src)/scripts/gcc-plugins/gcc-generate-rtl-pa 75 76 这些头文件可以自动生成 GIMP 77 与手动创建结构相比,它们 78 79 80 用法 81 ==== 82 83 你必须为你的 GCC 版本安装 GCC 插件 84 85 apt-get install gcc-10-plugin-dev 86 87 或者在 Fedora 上:: 88 89 dnf install gcc-plugin-devel libmpc-de 90 91 或者在 Fedora 上使用包含插件的交 92 93 dnf install libmpc-devel 94 95 在内核配置中启用 GCC 插件基础设 96 97 CONFIG_GCC_PLUGINS=y 98 CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y 99 ... 100 101 运行 gcc(本地或交叉编译器),确 102 103 gcc -print-file-name=plugin 104 CROSS_COMPILE=arm-linux-gnu- ${CROSS_C 105 106 "plugin" 这个词意味着它们没有被检 107 108 plugin 109 110 完整的路径则表示插件已经被检测 111 112 /usr/lib/gcc/x86_64-redhat-linux/12/plu 113 114 编译包括插件在内的最小工具集:: 115 116 make scripts 117 118 或者直接在内核中运行 make,使用 119 120 121 4. 如何添加新的 GCC 插件 122 ======================== 123 124 GCC 插件位于 scripts/gcc-plugins/。你需 125 子目录创建并不支持,你必须添加 126 和相关的 Kconfig 文件中。
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.