Blame view

Documentation/gcc-plugins.txt 2.93 KB
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
1
  =========================
6b90bd4ba   Emese Revfy   GCC plugin infras...
2
3
  GCC plugin infrastructure
  =========================
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
4
5
  Introduction
  ============
6b90bd4ba   Emese Revfy   GCC plugin infras...
6
7
  
  GCC plugins are loadable modules that provide extra features to the
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
8
  compiler [1]_. They are useful for runtime instrumentation and static analysis.
6b90bd4ba   Emese Revfy   GCC plugin infras...
9
  We can analyse, change and add further code during compilation via
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
10
  callbacks [2]_, GIMPLE [3]_, IPA [4]_ and RTL passes [5]_.
6b90bd4ba   Emese Revfy   GCC plugin infras...
11
12
13
14
15
16
17
18
  
  The GCC plugin infrastructure of the kernel supports all gcc versions from
  4.5 to 6.0, building out-of-tree modules, cross-compilation and building in a
  separate directory.
  Plugin source files have to be compilable by both a C and a C++ compiler as well
  because gcc versions 4.5 and 4.6 are compiled by a C compiler,
  gcc-4.7 can be compiled by a C or a C++ compiler,
  and versions 4.8+ can only be compiled by a C++ compiler.
cc638a488   Andrew Donnellan   gcc-plugins: upda...
19
20
  Currently the GCC plugin infrastructure supports only the x86, arm, arm64 and
  powerpc architectures.
6b90bd4ba   Emese Revfy   GCC plugin infras...
21

ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
22
  This infrastructure was ported from grsecurity [6]_ and PaX [7]_.
6b90bd4ba   Emese Revfy   GCC plugin infras...
23
24
  
  --
6b90bd4ba   Emese Revfy   GCC plugin infras...
25

ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
26
27
28
29
30
31
32
33
34
35
36
  .. [1] https://gcc.gnu.org/onlinedocs/gccint/Plugins.html
  .. [2] https://gcc.gnu.org/onlinedocs/gccint/Plugin-API.html#Plugin-API
  .. [3] https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html
  .. [4] https://gcc.gnu.org/onlinedocs/gccint/IPA.html
  .. [5] https://gcc.gnu.org/onlinedocs/gccint/RTL.html
  .. [6] https://grsecurity.net/
  .. [7] https://pax.grsecurity.net/
  
  
  Files
  =====
6b90bd4ba   Emese Revfy   GCC plugin infras...
37

ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
38
  **$(src)/scripts/gcc-plugins**
6b90bd4ba   Emese Revfy   GCC plugin infras...
39

6b90bd4ba   Emese Revfy   GCC plugin infras...
40
  	This is the directory of the GCC plugins.
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
41
  **$(src)/scripts/gcc-plugins/gcc-common.h**
6b90bd4ba   Emese Revfy   GCC plugin infras...
42
43
  	This is a compatibility header for GCC plugins.
  	It should be always included instead of individual gcc headers.
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
44
  **$(src)/scripts/gcc-plugin.sh**
6b90bd4ba   Emese Revfy   GCC plugin infras...
45
46
47
  	This script checks the availability of the included headers in
  	gcc-common.h and chooses the proper host compiler to build the plugins
  	(gcc-4.7 can be built by either gcc or g++).
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
48
49
50
51
  **$(src)/scripts/gcc-plugins/gcc-generate-gimple-pass.h,
  $(src)/scripts/gcc-plugins/gcc-generate-ipa-pass.h,
  $(src)/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h,
  $(src)/scripts/gcc-plugins/gcc-generate-rtl-pass.h**
6b90bd4ba   Emese Revfy   GCC plugin infras...
52
53
54
55
  	These headers automatically generate the registration structures for
  	GIMPLE, SIMPLE_IPA, IPA and RTL passes. They support all gcc versions
  	from 4.5 to 6.0.
  	They should be preferred to creating the structures by hand.
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
56
57
  Usage
  =====
6b90bd4ba   Emese Revfy   GCC plugin infras...
58
59
  
  You must install the gcc plugin headers for your gcc version,
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
60
  e.g., on Ubuntu for gcc-4.9::
6b90bd4ba   Emese Revfy   GCC plugin infras...
61
62
  
  	apt-get install gcc-4.9-plugin-dev
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
63
  Enable a GCC plugin based feature in the kernel config::
6b90bd4ba   Emese Revfy   GCC plugin infras...
64
65
  
  	CONFIG_GCC_PLUGIN_CYC_COMPLEXITY = y
ccd8d5577   Mauro Carvalho Chehab   gcc-plugins.txt: ...
66
  To compile only the plugin(s)::
6b90bd4ba   Emese Revfy   GCC plugin infras...
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  
  	make gcc-plugins
  
  or just run the kernel make and compile the whole kernel with
  the cyclomatic complexity GCC plugin.
  
  
  4. How to add a new GCC plugin
  ==============================
  
  The GCC plugins are in $(src)/scripts/gcc-plugins/. You can use a file or a directory
  here. It must be added to $(src)/scripts/gcc-plugins/Makefile,
  $(src)/scripts/Makefile.gcc-plugins and $(src)/arch/Kconfig.
  See the cyc_complexity_plugin.c (CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) GCC plugin.