~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/kbuild/gcc-plugins.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/kbuild/gcc-plugins.rst (Version linux-6.12-rc7) and /Documentation/kbuild/gcc-plugins.rst (Version linux-5.8.18)


  1 =========================                           1 =========================
  2 GCC plugin infrastructure                           2 GCC plugin infrastructure
  3 =========================                           3 =========================
  4                                                     4 
  5                                                     5 
  6 Introduction                                        6 Introduction
  7 ============                                        7 ============
  8                                                     8 
  9 GCC plugins are loadable modules that provide       9 GCC plugins are loadable modules that provide extra features to the
 10 compiler [1]_. They are useful for runtime ins     10 compiler [1]_. They are useful for runtime instrumentation and static analysis.
 11 We can analyse, change and add further code du     11 We can analyse, change and add further code during compilation via
 12 callbacks [2]_, GIMPLE [3]_, IPA [4]_ and RTL      12 callbacks [2]_, GIMPLE [3]_, IPA [4]_ and RTL passes [5]_.
 13                                                    13 
 14 The GCC plugin infrastructure of the kernel su !!  14 The GCC plugin infrastructure of the kernel supports all gcc versions from
 15 modules, cross-compilation and building in a s !!  15 4.5 to 6.0, building out-of-tree modules, cross-compilation and building in a
 16 Plugin source files have to be compilable by a !!  16 separate directory.
 17                                                !!  17 Plugin source files have to be compilable by both a C and a C++ compiler as well
 18 Currently the GCC plugin infrastructure suppor !!  18 because gcc versions 4.5 and 4.6 are compiled by a C compiler,
 19 Grep "select HAVE_GCC_PLUGINS" to find out whi !!  19 gcc-4.7 can be compiled by a C or a C++ compiler,
 20 GCC plugins.                                   !!  20 and versions 4.8+ can only be compiled by a C++ compiler.
                                                   >>  21 
                                                   >>  22 Currently the GCC plugin infrastructure supports only the x86, arm, arm64 and
                                                   >>  23 powerpc architectures.
 21                                                    24 
 22 This infrastructure was ported from grsecurity     25 This infrastructure was ported from grsecurity [6]_ and PaX [7]_.
 23                                                    26 
 24 --                                                 27 --
 25                                                    28 
 26 .. [1] https://gcc.gnu.org/onlinedocs/gccint/P     29 .. [1] https://gcc.gnu.org/onlinedocs/gccint/Plugins.html
 27 .. [2] https://gcc.gnu.org/onlinedocs/gccint/P     30 .. [2] https://gcc.gnu.org/onlinedocs/gccint/Plugin-API.html#Plugin-API
 28 .. [3] https://gcc.gnu.org/onlinedocs/gccint/G     31 .. [3] https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html
 29 .. [4] https://gcc.gnu.org/onlinedocs/gccint/I     32 .. [4] https://gcc.gnu.org/onlinedocs/gccint/IPA.html
 30 .. [5] https://gcc.gnu.org/onlinedocs/gccint/R     33 .. [5] https://gcc.gnu.org/onlinedocs/gccint/RTL.html
 31 .. [6] https://grsecurity.net/                     34 .. [6] https://grsecurity.net/
 32 .. [7] https://pax.grsecurity.net/                 35 .. [7] https://pax.grsecurity.net/
 33                                                    36 
 34                                                    37 
 35 Purpose                                        << 
 36 =======                                        << 
 37                                                << 
 38 GCC plugins are designed to provide a place to << 
 39 compiler features that are neither in GCC nor  << 
 40 their utility is proven, the goal is to upstre << 
 41 (and Clang), and then to finally remove them f << 
 42 feature is available in all supported versions << 
 43                                                << 
 44 Specifically, new plugins should implement onl << 
 45 upstream compiler support (in either GCC or Cl << 
 46                                                << 
 47 When a feature exists in Clang but not GCC, ef << 
 48 bring the feature to upstream GCC (rather than << 
 49 GCC plugin), so the entire ecosystem can benef << 
 50                                                << 
 51 Similarly, even if a feature provided by a GCC << 
 52 in Clang, but the feature is proven to be usef << 
 53 to upstream the feature to GCC (and Clang).    << 
 54                                                << 
 55 After a feature is available in upstream GCC,  << 
 56 unbuildable for the corresponding GCC version  << 
 57 kernel-supported versions of GCC provide the f << 
 58 be removed from the kernel.                    << 
 59                                                << 
 60                                                << 
 61 Files                                              38 Files
 62 =====                                              39 =====
 63                                                    40 
 64 **$(src)/scripts/gcc-plugins**                     41 **$(src)/scripts/gcc-plugins**
 65                                                    42 
 66         This is the directory of the GCC plugi     43         This is the directory of the GCC plugins.
 67                                                    44 
 68 **$(src)/scripts/gcc-plugins/gcc-common.h**        45 **$(src)/scripts/gcc-plugins/gcc-common.h**
 69                                                    46 
 70         This is a compatibility header for GCC     47         This is a compatibility header for GCC plugins.
 71         It should be always included instead o     48         It should be always included instead of individual gcc headers.
 72                                                    49 
                                                   >>  50 **$(src)/scripts/gcc-plugin.sh**
                                                   >>  51 
                                                   >>  52         This script checks the availability of the included headers in
                                                   >>  53         gcc-common.h and chooses the proper host compiler to build the plugins
                                                   >>  54         (gcc-4.7 can be built by either gcc or g++).
                                                   >>  55 
 73 **$(src)/scripts/gcc-plugins/gcc-generate-gimp     56 **$(src)/scripts/gcc-plugins/gcc-generate-gimple-pass.h,
 74 $(src)/scripts/gcc-plugins/gcc-generate-ipa-pa     57 $(src)/scripts/gcc-plugins/gcc-generate-ipa-pass.h,
 75 $(src)/scripts/gcc-plugins/gcc-generate-simple     58 $(src)/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h,
 76 $(src)/scripts/gcc-plugins/gcc-generate-rtl-pa     59 $(src)/scripts/gcc-plugins/gcc-generate-rtl-pass.h**
 77                                                    60 
 78         These headers automatically generate t     61         These headers automatically generate the registration structures for
 79         GIMPLE, SIMPLE_IPA, IPA and RTL passes !!  62         GIMPLE, SIMPLE_IPA, IPA and RTL passes. They support all gcc versions
                                                   >>  63         from 4.5 to 6.0.
 80         They should be preferred to creating t     64         They should be preferred to creating the structures by hand.
 81                                                    65 
 82                                                    66 
 83 Usage                                              67 Usage
 84 =====                                              68 =====
 85                                                    69 
 86 You must install the gcc plugin headers for yo     70 You must install the gcc plugin headers for your gcc version,
 87 e.g., on Ubuntu for gcc-10::                   !!  71 e.g., on Ubuntu for gcc-4.9::
 88                                                    72 
 89         apt-get install gcc-10-plugin-dev      !!  73         apt-get install gcc-4.9-plugin-dev
 90                                                    74 
 91 Or on Fedora::                                     75 Or on Fedora::
 92                                                    76 
 93         dnf install gcc-plugin-devel libmpc-de !!  77         dnf install gcc-plugin-devel
 94                                                << 
 95 Or on Fedora when using cross-compilers that i << 
 96                                                << 
 97         dnf install libmpc-devel               << 
 98                                                << 
 99 Enable the GCC plugin infrastructure and some  << 
100 in the kernel config::                         << 
101                                                << 
102         CONFIG_GCC_PLUGINS=y                   << 
103         CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y     << 
104         ...                                    << 
105                                                << 
106 Run gcc (native or cross-compiler) to ensure p << 
107                                                << 
108         gcc -print-file-name=plugin            << 
109         CROSS_COMPILE=arm-linux-gnu- ${CROSS_C << 
110                                                << 
111 The word "plugin" means they are not detected: << 
112                                                << 
113         plugin                                 << 
114                                                    78 
115 A full path means they are detected::          !!  79 Enable a GCC plugin based feature in the kernel config::
116                                                    80 
117        /usr/lib/gcc/x86_64-redhat-linux/12/plu !!  81         CONFIG_GCC_PLUGIN_CYC_COMPLEXITY = y
118                                                    82 
119 To compile the minimum tool set including the  !!  83 To compile only the plugin(s)::
120                                                    84 
121         make scripts                           !!  85         make gcc-plugins
122                                                    86 
123 or just run the kernel make and compile the wh     87 or just run the kernel make and compile the whole kernel with
124 the cyclomatic complexity GCC plugin.              88 the cyclomatic complexity GCC plugin.
125                                                    89 
126                                                    90 
127 4. How to add a new GCC plugin                     91 4. How to add a new GCC plugin
128 ==============================                     92 ==============================
129                                                    93 
130 The GCC plugins are in scripts/gcc-plugins/. Y !!  94 The GCC plugins are in $(src)/scripts/gcc-plugins/. You can use a file or a directory
131 right under scripts/gcc-plugins/. Creating sub !!  95 here. It must be added to $(src)/scripts/gcc-plugins/Makefile,
132 It must be added to scripts/gcc-plugins/Makefi !!  96 $(src)/scripts/Makefile.gcc-plugins and $(src)/arch/Kconfig.
133 and a relevant Kconfig file.                   !!  97 See the cyc_complexity_plugin.c (CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) GCC plugin.
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php