GCC Python Plugins
Summary
I have created a GCC plugin that embeds Python within GCC. Interested developers should be able to use this to easily extend GCC by writing Python scripts, such as adding new warnings for a library that they work on, without needing to use C.
Owner
- Name: Dave Malcolm
- Email: dmalcolm@redhat.com
Current status
- Targeted release: [[Releases/<number> | Fedora <number> ]]
- Last updated: 2011-06-01
- Percentage of completion: 20%
Detailed Description
The plugins will allow interested developers to extend GCC in Python 2 and Python 3, without needing to deal with the C internals of GCC.
Example of potential uses include adding new compiler warnings based on:
- GTK's reference-counting semantics
- locking in the Linux kernel
- signal-safety in APIs.
- malloc/free usage (e.g. use-after-free bugs)
- array boundary checks
I aim to use the feature to add compile-time checking of the source code to all CPython extension modules in Fedora, as described in Features/StaticAnalysisOfCPythonExtensions
Other ideas include:
- visualizations of code structure
- semantic grepping of source code (e.g. "find all invocations of C++ methods named 'draw' that use the default params")
There will be four GCC plugins:
- a plugin embedding Python 2 (actually dynamically linked against libpython2.7.so)
- a plugin embedding python 3 (actually dynamically linked against libpython3.2.so)
- as above, but for the debug builds of Python 2 and Python 3, rather than the optimized builds.
The "upstream" for the plugins will be in this location: https://fedorahosted.org/gcc-python-plugin/
Benefit to Fedora
Fedora is already a very attractive platform for software development. By making it very easy to extend GCC, the plugin makes Fedora even more compelling to developers. The plugin code was written by a Fedora developer, and is a "Fedora Hosted" project.
Scope
This involves:
- writing the plugin
- packaging it
- documenting it
- keeping it in sync with gcc
How To Test
User Experience
Non-technical end-users of Fedora should see no difference.
Developers will be able to invoke Python scripts whilst running GCC by adding these arguments to GCC's command line:
gcc -fplugin=python2 -fplugin-arg-python2-script=PATH_TO_SCRIPT.py
for a Python 2 script and:
gcc -fplugin=python3 -fplugin-arg-python3-script=PATH_TO_SCRIPT.py
for a Python 3 script.
Dependencies
This will require working closely with the gcc maintainer. I anticipate needing to rebuild the plugin each time that gcc is rebuilt.
Contingency Plan
Documentation
API documentation for the plugin can be seen at http://readthedocs.org/docs/gcc-python-plugin/en/latest/index.html
Release Notes
- GCC plugins that embed Python are now available. These were written by Fedora contributor David Malcolm and