From Fedora Project Wiki

Revision as of 09:12, 22 June 2011 by Dmalcolm (talk | contribs) (→‎Summary: add link to project website)


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

  • 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

Release Notes

  • GCC plugins that embed Python are now available. These were written by Fedora contributor David Malcolm and

Comments and Discussion