sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/dev-tools/coccinellemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/pt_BR/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/dev-tools/coccinellemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h-Copyright 2010 Nicolas Palix h]h-Copyright 2010 Nicolas Palix }hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhB/var/lib/git/docbuild/linux/Documentation/dev-tools/coccinelle.rsthKubh)}(h+Copyright 2010 Julia Lawall h]h+Copyright 2010 Julia Lawall }hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubh)}(h4Copyright 2010 Gilles Muller h]h4Copyright 2010 Gilles Muller }hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubh highlightlang)}(hhh]h}(h]h ]h"]h$]h&]langnoneforcelinenothresholduh1hhhhhhhhKubhtarget)}(h.. _devtools_coccinelle:h]h}(h]h ]h"]h$]h&]refiddevtools-coccinelleuh1hhKhhhhhhubhsection)}(hhh](htitle)}(h Coccinelleh]h Coccinelle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK ubh paragraph)}(hCoccinelle is a tool for pattern matching and text transformation that has many uses in kernel development, including the application of complex, tree-wide patches and detection of problematic programming patterns.h]hCoccinelle is a tool for pattern matching and text transformation that has many uses in kernel development, including the application of complex, tree-wide patches and detection of problematic programming patterns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK hjhhubj)}(hhh](j)}(hGetting Coccinelleh]hGetting Coccinelle}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&hhhhhKubj)}(hThe semantic patches included in the kernel use features and options which are provided by Coccinelle version 1.0.0-rc11 and above. Using earlier versions will fail as the option names used by the Coccinelle files and coccicheck have been updated.h]hThe semantic patches included in the kernel use features and options which are provided by Coccinelle version 1.0.0-rc11 and above. Using earlier versions will fail as the option names used by the Coccinelle files and coccicheck have been updated.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj&hhubj)}(hQCoccinelle is available through the package manager of many distributions, e.g. :h]hQCoccinelle is available through the package manager of many distributions, e.g. :}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj&hhubh block_quote)}(hO- Debian - Fedora - Ubuntu - OpenSUSE - Arch Linux - Gentoo - NetBSD - FreeBSD h]h bullet_list)}(hhh](h list_item)}(hDebianh]j)}(hjbh]hDebian}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj`ubah}(h]h ]h"]h$]h&]uh1j^hj[ubj_)}(hFedorah]j)}(hjyh]hFedora}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjwubah}(h]h ]h"]h$]h&]uh1j^hj[ubj_)}(hUbuntuh]j)}(hjh]hUbuntu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j^hj[ubj_)}(hOpenSUSEh]j)}(hjh]hOpenSUSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j^hj[ubj_)}(h Arch Linuxh]j)}(hjh]h Arch Linux}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j^hj[ubj_)}(hGentooh]j)}(hjh]hGentoo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK hjubah}(h]h ]h"]h$]h&]uh1j^hj[ubj_)}(hNetBSDh]j)}(hjh]hNetBSD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK!hjubah}(h]h ]h"]h$]h&]uh1j^hj[ubj_)}(hFreeBSD h]j)}(hFreeBSDh]hFreeBSD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK"hjubah}(h]h ]h"]h$]h&]uh1j^hj[ubeh}(h]h ]h"]h$]h&]bullet-uh1jYhhhKhjUubah}(h]h ]h"]h$]h&]uh1jShhhKhj&hhubj)}(hSome distribution packages are obsolete and it is recommended to use the latest version released from the Coccinelle homepage at https://coccinelle.gitlabpages.inria.fr/websiteh](hSome distribution packages are obsolete and it is recommended to use the latest version released from the Coccinelle homepage at }(hj'hhhNhNubh reference)}(h/https://coccinelle.gitlabpages.inria.fr/websiteh]h/https://coccinelle.gitlabpages.inria.fr/website}(hj1hhhNhNubah}(h]h ]h"]h$]h&]refurij3uh1j/hj'ubeh}(h]h ]h"]h$]h&]uh1jhhhK$hj&hhubj)}(hOr from Github at:h]hOr from Github at:}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK(hj&hhubj)}(h(https://github.com/coccinelle/coccinelleh]j0)}(hjVh]h(https://github.com/coccinelle/coccinelle}(hjXhhhNhNubah}(h]h ]h"]h$]h&]refurijVuh1j/hjTubah}(h]h ]h"]h$]h&]uh1jhhhK*hj&hhubj)}(h.Once you have it, run the following commands::h]h-Once you have it, run the following commands:}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK,hj&hhubh literal_block)}(h./autogen ./configure makeh]h./autogen ./configure make}hj|sbah}(h]h ]h"]h$]h&]hhuh1jzhhhK.hj&hhubj)}(h(as a regular user, and install it with::h]h'as a regular user, and install it with:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK2hj&hhubj{)}(hsudo make installh]hsudo make install}hjsbah}(h]h ]h"]h$]h&]hhuh1jzhhhK4hj&hhubj)}(hMMore detailed installation instructions to build from source can be found at:h]hMMore detailed installation instructions to build from source can be found at:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK6hj&hhubj)}(h@https://github.com/coccinelle/coccinelle/blob/master/install.txth]j0)}(hjh]h@https://github.com/coccinelle/coccinelle/blob/master/install.txt}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j/hjubah}(h]h ]h"]h$]h&]uh1jhhhK9hj&hhubeh}(h]getting-coccinelleah ]h"]getting coccinelleah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(hSupplemental documentationh]hSupplemental documentation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKhjhhubj)}(h/https://bottest.wiki.kernel.org/coccicheck.htmlh]j0)}(hjh]h/https://bottest.wiki.kernel.org/coccicheck.html}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j/hjubah}(h]h ]h"]h$]h&]uh1jhhhK@hjhhubj)}(hMThe wiki documentation always refers to the linux-next version of the script.h]hMThe wiki documentation always refers to the linux-next version of the script.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKBhjhhubj)}(hAFor Semantic Patch Language(SmPL) grammar documentation refer to:h]hAFor Semantic Patch Language(SmPL) grammar documentation refer to:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKDhjhhubj)}(hFhttps://coccinelle.gitlabpages.inria.fr/website/docs/main_grammar.htmlh]j0)}(hj)h]hFhttps://coccinelle.gitlabpages.inria.fr/website/docs/main_grammar.html}(hj+hhhNhNubah}(h]h ]h"]h$]h&]refurij)uh1j/hj'ubah}(h]h ]h"]h$]h&]uh1jhhhKFhjhhubeh}(h]supplemental-documentationah ]h"]supplemental documentationah$]h&]uh1jhjhhhhhK``.h](hFour basic modes are defined: }(hjhhhNhNubja)}(h ``patch``h]hpatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh, }(hjhhhNhNubja)}(h ``report``h]hreport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh, }hjsbja)}(h ``context``h]hcontext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh, and }(hjhhhNhNubja)}(h``org``h]horg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubhA. The mode to use is specified by setting the MODE variable with }(hjhhhNhNubja)}(h``MODE=``h]h MODE=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKOhjGhhubjZ)}(hhh](j_)}(h)``patch`` proposes a fix, when possible. h]j)}(h(``patch`` proposes a fix, when possible.h](ja)}(h ``patch``h]hpatch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh proposes a fix, when possible.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKShj ubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhNubj_)}(hV``report`` generates a list in the following format: file:line:column-column: message h]j)}(hU``report`` generates a list in the following format: file:line:column-column: messageh](ja)}(h ``report``h]hreport}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj3ubh+ generates a list in the following format: }(hj3hhhNhNubj0)}(hfile:line:column-columnh]hfile:line:column-column}(hjIhhhNhNubah}(h]h ]h"]h$]h&]refurijKuh1j/hj3ubh : message}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKUhj/ubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhNubj_)}(h}``context`` highlights lines of interest and their context in a diff-like style. Lines of interest are indicated with ``-``. h]j)}(h|``context`` highlights lines of interest and their context in a diff-like style. Lines of interest are indicated with ``-``.h](ja)}(h ``context``h]hcontext}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjlubhk highlights lines of interest and their context in a diff-like style. Lines of interest are indicated with }(hjlhhhNhNubja)}(h``-``h]h-}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjlubh.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKXhjhubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhNubj_)}(h<``org`` generates a report in the Org mode format of Emacs. h]j)}(h;``org`` generates a report in the Org mode format of Emacs.h](ja)}(h``org``h]horg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh4 generates a report in the Org mode format of Emacs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK[hjubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhNubeh}(h]h ]h"]h$]h&]jj uh1jYhhhKShjGhhubj)}(hqNote that not all semantic patches implement all modes. For easy use of Coccinelle, the default mode is "report".h]huNote that not all semantic patches implement all modes. For easy use of Coccinelle, the default mode is “report”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK]hjGhhubj)}(h@Two other modes provide some common combinations of these modes.h]h@Two other modes provide some common combinations of these modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK`hjGhhubjZ)}(hhh](j_)}(hJ``chain`` tries the previous modes in the order above until one succeeds. h]j)}(hI``chain`` tries the previous modes in the order above until one succeeds.h](ja)}(h ``chain``h]hchain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh@ tries the previous modes in the order above until one succeeds.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKbhjubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhNubj_)}(h``rep+ctxt`` runs successively the report mode and the context mode. It should be used with the C option (described later) which checks the code on a file basis. h]j)}(h``rep+ctxt`` runs successively the report mode and the context mode. It should be used with the C option (described later) which checks the code on a file basis.h](ja)}(h ``rep+ctxt``h]hrep+ctxt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh runs successively the report mode and the context mode. It should be used with the C option (described later) which checks the code on a file basis.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKdhjubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhNubeh}(h]h ]h"]h$]h&]jj uh1jYhhhKbhjGhhubj)}(hhh](j)}(hExamplesh]hExamples}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=hhhhhKiubj)}(hFTo make a report for every semantic patch, run the following command::h]hETo make a report for every semantic patch, run the following command:}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKkhj=hhubj{)}(hmake coccicheck MODE=reporth]hmake coccicheck MODE=report}hj\sbah}(h]h ]h"]h$]h&]hhuh1jzhhhKmhj=hhubj)}(hTo produce patches, run::h]hTo produce patches, run:}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKohj=hhubj{)}(hmake coccicheck MODE=patchh]hmake coccicheck MODE=patch}hjxsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKqhj=hhubj)}(hThe coccicheck target applies every semantic patch available in the sub-directories of ``scripts/coccinelle`` to the entire Linux kernel.h](hWThe coccicheck target applies every semantic patch available in the sub-directories of }(hjhhhNhNubja)}(h``scripts/coccinelle``h]hscripts/coccinelle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh to the entire Linux kernel.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKthj=hhubj)}(hFor each semantic patch, a commit message is proposed. It gives a description of the problem being checked by the semantic patch, and includes a reference to Coccinelle.h]hFor each semantic patch, a commit message is proposed. It gives a description of the problem being checked by the semantic patch, and includes a reference to Coccinelle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKwhj=hhubj)}(hAs with any static code analyzer, Coccinelle produces false positives. Thus, reports must be carefully checked, and patches reviewed.h]hAs with any static code analyzer, Coccinelle produces false positives. Thus, reports must be carefully checked, and patches reviewed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK{hj=hhubj)}(h=To enable verbose messages set the V= variable, for example::h]h MODE=patchh]h.make coccicheck COCCI= MODE=patch}hjsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKhjhhubj)}(hor::h]hor:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj{)}(h/make coccicheck COCCI= MODE=reporth]h/make coccicheck COCCI= MODE=report}hjsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKhjhhubeh}(h]-using-coccinelle-with-a-single-semantic-patchah ]h"]-using coccinelle with a single semantic patchah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h3Controlling Which Files are Processed by Coccinelleh]h3Controlling Which Files are Processed by Coccinelle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj)}(h4By default the entire kernel source tree is checked.h]h4By default the entire kernel source tree is checked.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h|To apply Coccinelle to a specific directory, ``M=`` can be used. For example, to check drivers/net/wireless/ one may write::h](h-To apply Coccinelle to a specific directory, }(hj9hhhNhNubja)}(h``M=``h]hM=}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj9ubhH can be used. For example, to check drivers/net/wireless/ one may write:}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj{)}(h'make coccicheck M=drivers/net/wireless/h]h'make coccicheck M=drivers/net/wireless/}hjYsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKhjhhubj)}(hTo apply Coccinelle on a file basis, instead of a directory basis, the C variable is used by the makefile to select which files to work with. This variable can be used to run scripts for the entire kernel, a specific directory, or for a single file.h]hTo apply Coccinelle on a file basis, instead of a directory basis, the C variable is used by the makefile to select which files to work with. This variable can be used to run scripts for the entire kernel, a specific directory, or for a single file.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hFor example, to check drivers/bluetooth/bfusb.c, the value 1 is passed to the C variable to check files that make considers need to be compiled.::h]hFor example, to check drivers/bluetooth/bfusb.c, the value 1 is passed to the C variable to check files that make considers need to be compiled.:}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj{)}(h;make C=1 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.oh]h;make C=1 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.o}hjsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKhjhhubj)}(hoThe value 2 is passed to the C variable to check files regardless of whether they need to be compiled or not.::h]hnThe value 2 is passed to the C variable to check files regardless of whether they need to be compiled or not.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj{)}(h;make C=2 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.oh]h;make C=2 CHECK=scripts/coccicheck drivers/bluetooth/bfusb.o}hjsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKhjhhubj)}(hIn these modes, which work on a file basis, there is no information about semantic patches displayed, and no commit message proposed.h]hIn these modes, which work on a file basis, there is no information about semantic patches displayed, and no commit message proposed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hThis runs every semantic patch in scripts/coccinelle by default. The COCCI variable may additionally be used to only apply a single semantic patch as shown in the previous section.h]hThis runs every semantic patch in scripts/coccinelle by default. The COCCI variable may additionally be used to only apply a single semantic patch as shown in the previous section.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hdThe "report" mode is the default. You can select another one with the MODE variable explained above.h]hhThe “report” mode is the default. You can select another one with the MODE variable explained above.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]3controlling-which-files-are-processed-by-coccinelleah ]h"]3controlling which files are processed by coccinelleah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h!Debugging Coccinelle SmPL patchesh]h!Debugging Coccinelle SmPL patches}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj)}(hUsing coccicheck is best as it provides in the spatch command line include options matching the options used when we compile the kernel. You can learn what these options are by using V=1; you could then manually run Coccinelle with debug options added.h]hUsing coccicheck is best as it provides in the spatch command line include options matching the options used when we compile the kernel. You can learn what these options are by using V=1; you could then manually run Coccinelle with debug options added.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hX;An easier approach to debug running Coccinelle against SmPL patches is to ask coccicheck to redirect stderr to a debug file. As mentioned in the examples, by default stderr is redirected to /dev/null; if you'd like to capture stderr you can specify the ``DEBUG_FILE="file.txt"`` option to coccicheck. For instance::h](hAn easier approach to debug running Coccinelle against SmPL patches is to ask coccicheck to redirect stderr to a debug file. As mentioned in the examples, by default stderr is redirected to /dev/null; if you’d like to capture stderr you can specify the }(hjhhhNhNubja)}(h``DEBUG_FILE="file.txt"``h]hDEBUG_FILE="file.txt"}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh$ option to coccicheck. For instance:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj{)}(hxrm -f cocci.err make coccicheck COCCI=scripts/coccinelle/free/kfree.cocci MODE=report DEBUG_FILE=cocci.err cat cocci.errh]hxrm -f cocci.err make coccicheck COCCI=scripts/coccinelle/free/kfree.cocci MODE=report DEBUG_FILE=cocci.err cat cocci.err}hjsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKhjhhubj)}(hYou can use SPFLAGS to add debugging flags; for instance you may want to add both ``--profile --show-trying`` to SPFLAGS when debugging. For example you may want to use::h](hRYou can use SPFLAGS to add debugging flags; for instance you may want to add both }(hj,hhhNhNubja)}(h``--profile --show-trying``h]h--profile --show-trying}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj,ubh< to SPFLAGS when debugging. For example you may want to use:}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj{)}(hrm -f err.log export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci make coccicheck DEBUG_FILE="err.log" MODE=report SPFLAGS="--profile --show-trying" M=./drivers/mfdh]hrm -f err.log export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci make coccicheck DEBUG_FILE="err.log" MODE=report SPFLAGS="--profile --show-trying" M=./drivers/mfd}hjLsbah}(h]h ]h"]h$]h&]hhuh1jzhhhKhjhhubj)}(herr.log will now have the profiling information, while stdout will provide some progress information as Coccinelle moves forward with work.h]herr.log will now have the profiling information, while stdout will provide some progress information as Coccinelle moves forward with work.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hNOTE:h]hNOTE:}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hDDEBUG_FILE support is only supported when using coccinelle >= 1.0.2.h]hDDEBUG_FILE support is only supported when using coccinelle >= 1.0.2.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hCurrently, DEBUG_FILE support is only available to check folders, and not single files. This is because checking a single file requires spatch to be called twice leading to DEBUG_FILE being set both times to the same value, giving rise to an error.h]hCurrently, DEBUG_FILE support is only available to check folders, and not single files. This is because checking a single file requires spatch to be called twice leading to DEBUG_FILE being set both times to the same value, giving rise to an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]!debugging-coccinelle-smpl-patchesah ]h"]!debugging coccinelle smpl patchesah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h.cocciconfig supporth]h.cocciconfig support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj)}(hCoccinelle supports reading .cocciconfig for default Coccinelle options that should be used every time spatch is spawned. The order of precedence for variables for .cocciconfig is as follows:h]hCoccinelle supports reading .cocciconfig for default Coccinelle options that should be used every time spatch is spawned. The order of precedence for variables for .cocciconfig is as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubjZ)}(hhh](j_)}(h5Your current user's home directory is processed firsth]j)}(hjh]h7Your current user’s home directory is processed first}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j^hjhhhhhNubj_)}(h= 1.0.6. When no ID file is specified coccinelle assumes your ID database file is in the file .id-utils.index on the top level of the kernel. Coccinelle carries a script scripts/idutils_index.sh which creates the database with::h]hX Coccinelle supports idutils as well but requires coccinelle >= 1.0.6. When no ID file is specified coccinelle assumes your ID database file is in the file .id-utils.index on the top level of the kernel. Coccinelle carries a script scripts/idutils_index.sh which creates the database with:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM5hj hhubj{)}(h"mkid -i C --output .id-utils.indexh]h"mkid -i C --output .id-utils.index}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhM:hj hhubj)}(hRIf you have another database filename you can also just symlink with this name. ::h]hOIf you have another database filename you can also just symlink with this name.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM<hj hhubj{)}(h%make SPFLAGS=--use-idutils coccicheckh]h%make SPFLAGS=--use-idutils coccicheck}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhM?hj hhubj)}(hNAlternatively you can specify the database filename explicitly, for instance::h]hMAlternatively you can specify the database filename explicitly, for instance:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMAhj hhubj{)}(h8make SPFLAGS="--use-idutils /full-path/to/ID" coccicheckh]h8make SPFLAGS="--use-idutils /full-path/to/ID" coccicheck}hj% sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMDhj hhubj)}(h9See ``spatch --help`` to learn more about spatch options.h](hSee }(hj3 hhhNhNubja)}(h``spatch --help``h]h spatch --help}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj3 ubh$ to learn more about spatch options.}(hj3 hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMFhj hhubj)}(hX(Note that the ``--use-glimpse`` and ``--use-idutils`` options require external tools for indexing the code. None of them is thus active by default. However, by indexing the code with one of these tools, and according to the cocci file used, spatch could proceed the entire code base more quickly.h](hNote that the }(hjS hhhNhNubja)}(h``--use-glimpse``h]h --use-glimpse}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjS ubh and }(hjS hhhNhNubja)}(h``--use-idutils``h]h --use-idutils}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjS ubh options require external tools for indexing the code. None of them is thus active by default. However, by indexing the code with one of these tools, and according to the cocci file used, spatch could proceed the entire code base more quickly.}(hjS hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMHhj hhubeh}(h]additional-flagsah ]h"]additional flagsah$]h&]uh1jhjhhhhhM-ubj)}(hhh](j)}(hSmPL patch specific optionsh]hSmPL patch specific options}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMOubj)}(hSmPL patches can have their own requirements for options passed to Coccinelle. SmPL patch-specific options can be provided by providing them at the top of the SmPL patch, for instance::h]hSmPL patches can have their own requirements for options passed to Coccinelle. SmPL patch-specific options can be provided by providing them at the top of the SmPL patch, for instance:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhj hhubj{)}(h+// Options: --no-includes --include-headersh]h+// Options: --no-includes --include-headers}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMUhj hhubeh}(h]smpl-patch-specific-optionsah ]h"]smpl patch specific optionsah$]h&]uh1jhjhhhhhMOubj)}(hhh](j)}(h"SmPL patch Coccinelle requirementsh]h"SmPL patch Coccinelle requirements}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMXubj)}(hXAs Coccinelle features get added some more advanced SmPL patches may require newer versions of Coccinelle. If an SmPL patch requires a minimum version of Coccinelle, this can be specified as follows, as an example if requiring at least Coccinelle >= 1.0.5::h]hXAs Coccinelle features get added some more advanced SmPL patches may require newer versions of Coccinelle. If an SmPL patch requires a minimum version of Coccinelle, this can be specified as follows, as an example if requiring at least Coccinelle >= 1.0.5:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMZhj hhubj{)}(h// Requires: 1.0.5h]h// Requires: 1.0.5}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhM_hj hhubeh}(h]"smpl-patch-coccinelle-requirementsah ]h"]"smpl patch coccinelle requirementsah$]h&]uh1jhjhhhhhMXubj)}(hhh](j)}(hProposing new semantic patchesh]hProposing new semantic patches}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMbubj)}(hNew semantic patches can be proposed and submitted by kernel developers. For sake of clarity, they should be organized in the sub-directories of ``scripts/coccinelle/``.h](hNew semantic patches can be proposed and submitted by kernel developers. For sake of clarity, they should be organized in the sub-directories of }(hj hhhNhNubja)}(h``scripts/coccinelle/``h]hscripts/coccinelle/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMdhj hhubeh}(h]proposing-new-semantic-patchesah ]h"]proposing new semantic patchesah$]h&]uh1jhjhhhhhMbubj)}(hhh](j)}(h+Detailed description of the ``report`` modeh](hDetailed description of the }(hj3 hhhNhNubja)}(h ``report``h]hreport}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj3 ubh mode}(hj3 hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj0 hhhhhMjubj)}(h5``report`` generates a list in the following format::h](ja)}(h ``report``h]hreport}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjS ubh* generates a list in the following format:}(hjS hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMlhj0 hhubj{)}(h file:line:column-column: messageh]h file:line:column-column: message}hjo sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMnhj0 hhubj)}(hhh](j)}(hExampleh]hExample}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj} hhhhhMqubj)}(h Running::h]hRunning:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMshj} hhubj{)}(hGmake coccicheck MODE=report COCCI=scripts/coccinelle/api/err_cast.coccih]hGmake coccicheck MODE=report COCCI=scripts/coccinelle/api/err_cast.cocci}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMuhj} hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMwhj} hhubj{)}(hX @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on report@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) coccilib.report.print_report(p[0], msg) h]hX @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on report@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) coccilib.report.print_report(p[0], msg) }hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMyhj} hhubj)}(hRThis SmPL excerpt generates entries on the standard output, as illustrated below::h]hQThis SmPL excerpt generates entries on the standard output, as illustrated below:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj} hhubj{)}(h/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg /home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth /home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with algh]h/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg /home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth /home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with alg}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj} hhubeh}(h]exampleah ]h"]h$]exampleah&]uh1jhj0 hhhhhMq referencedKubeh}(h]'detailed-description-of-the-report-modeah ]h"]'detailed description of the report modeah$]h&]uh1jhjhhhhhMjubj)}(hhh](j)}(h*Detailed description of the ``patch`` modeh](hDetailed description of the }(hj hhhNhNubja)}(h ``patch``h]hpatch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh mode}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj)}(hTWhen the ``patch`` mode is available, it proposes a fix for each problem identified.h](h When the }(hj hhhNhNubja)}(h ``patch``h]hpatch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubhB mode is available, it proposes a fix for each problem identified.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj hhubj)}(hhh](j)}(hExampleh]hExample}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6 hhhhhMubj)}(h Running::h]hRunning:}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj{)}(hFmake coccicheck MODE=patch COCCI=scripts/coccinelle/api/err_cast.coccih]hFmake coccicheck MODE=patch COCCI=scripts/coccinelle/api/err_cast.cocci}hjU sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj6 hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj{)}(hx @ depends on !context && patch && !org && !report @ expression x; @@ - ERR_PTR(PTR_ERR(x)) + ERR_CAST(x) h]hx @ depends on !context && patch && !org && !report @ expression x; @@ - ERR_PTR(PTR_ERR(x)) + ERR_CAST(x) }hjq sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj6 hhubj)}(hVThis SmPL excerpt generates patch hunks on the standard output, as illustrated below::h]hUThis SmPL excerpt generates patch hunks on the standard output, as illustrated below:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj6 hhubj{)}(hXdiff -u -p a/crypto/ctr.c b/crypto/ctr.c --- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200 @@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); + return ERR_CAST(alg); /* Block size must be >= 4 bytes. */ err = -EINVAL;h]hXdiff -u -p a/crypto/ctr.c b/crypto/ctr.c --- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200 @@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); + return ERR_CAST(alg); /* Block size must be >= 4 bytes. */ err = -EINVAL;}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj6 hhubeh}(h]id1ah ]h"]h$]j ah&]uh1jhj hhhhhMj Kubeh}(h]&detailed-description-of-the-patch-modeah ]h"]&detailed description of the patch modeah$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h,Detailed description of the ``context`` modeh](hDetailed description of the }(hj hhhNhNubja)}(h ``context``h]hcontext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh mode}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj)}(hP``context`` highlights lines of interest and their context in a diff-like style.h](ja)}(h ``context``h]hcontext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubhE highlights lines of interest and their context in a diff-like style.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjT)}(hX#**NOTE**: The diff-like output generated is NOT an applicable patch. The intent of the ``context`` mode is to highlight the important lines (annotated with minus, ``-``) and gives some surrounding context lines around. This output can be used with the diff mode of Emacs to review the code. h]j)}(hX"**NOTE**: The diff-like output generated is NOT an applicable patch. The intent of the ``context`` mode is to highlight the important lines (annotated with minus, ``-``) and gives some surrounding context lines around. This output can be used with the diff mode of Emacs to review the code.h](hstrong)}(h**NOTE**h]hNOTE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubhO: The diff-like output generated is NOT an applicable patch. The intent of the }(hj hhhNhNubja)}(h ``context``h]hcontext}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubhA mode is to highlight the important lines (annotated with minus, }(hj hhhNhNubja)}(h``-``h]h-}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubhz) and gives some surrounding context lines around. This output can be used with the diff mode of Emacs to review the code.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jShhhMhj hhubj)}(hhh](j)}(hExampleh]hExample}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5 hhhhhMubj)}(h Running::h]hRunning:}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5 hhubj{)}(hHmake coccicheck MODE=context COCCI=scripts/coccinelle/api/err_cast.coccih]hHmake coccicheck MODE=context COCCI=scripts/coccinelle/api/err_cast.cocci}hjT sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj5 hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5 hhubj{)}(hi @ depends on context && !patch && !org && !report@ expression x; @@ * ERR_PTR(PTR_ERR(x)) h]hi @ depends on context && !patch && !org && !report@ expression x; @@ * ERR_PTR(PTR_ERR(x)) }hjp sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj5 hhubj)}(hUThis SmPL excerpt generates diff hunks on the standard output, as illustrated below::h]hTThis SmPL excerpt generates diff hunks on the standard output, as illustrated below:}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5 hhubj{)}(hXdiff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing --- /home/user/linux/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ /tmp/nothing @@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); /* Block size must be >= 4 bytes. */ err = -EINVAL;h]hXdiff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing --- /home/user/linux/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 +++ /tmp/nothing @@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_MASK); if (IS_ERR(alg)) - return ERR_PTR(PTR_ERR(alg)); /* Block size must be >= 4 bytes. */ err = -EINVAL;}hj sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj5 hhubeh}(h]id2ah ]h"]h$]exampleah&]uh1jhj hhhhhMj Kubeh}(h](detailed-description-of-the-context-modeah ]h"](detailed description of the context modeah$]h&]uh1jhjhhhhhMubj)}(hhh](j)}(h(Detailed description of the ``org`` modeh](hDetailed description of the }(hj hhhNhNubja)}(h``org``h]horg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh mode}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj)}(h;``org`` generates a report in the Org mode format of Emacs.h](ja)}(h``org``h]horg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh4 generates a report in the Org mode format of Emacs.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj hhubj)}(hhh](j)}(hExampleh]hExample}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhMubj)}(h Running::h]hRunning:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubj{)}(hDmake coccicheck MODE=org COCCI=scripts/coccinelle/api/err_cast.coccih]hDmake coccicheck MODE=org COCCI=scripts/coccinelle/api/err_cast.cocci}hjsbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj hhubj)}(h4will execute the following part of the SmPL script::h]h3will execute the following part of the SmPL script:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubj{)}(hX2 @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on org@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) h]hX2 @r depends on !context && !patch && (org || report)@ expression x; position p; @@ ERR_PTR@p(PTR_ERR(x)) @script:python depends on org@ p << r.p; x << r.x; @@ msg="ERR_CAST can be used with %s" % (x) msg_safe=msg.replace("[","@(").replace("]",")") coccilib.org.print_todo(p[0], msg_safe) }hj$sbah}(h]h ]h"]h$]h&]hhuh1jzhhhMhj hhubj)}(hVThis SmPL excerpt generates Org entries on the standard output, as illustrated below::h]hUThis SmPL excerpt generates Org entries on the standard output, as illustrated below:}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubj{)}(hXl* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]] * TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]] * TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]]h]hXl* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]] * TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]] * TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]]}hj@sbah}(h]h ]h"]h$]h&]hhuh1jzhhhM hj hhubeh}(h]id3ah ]h"]h$]exampleah&]uh1jhj hhhhhMj Kubeh}(h]$detailed-description-of-the-org-modeah ]h"]$detailed description of the org modeah$]h&]uh1jhjhhhhhMubeh}(h]( coccinellejeh ]h"]( coccinelledevtools_coccinelleeh$]h&]uh1jhhhhhhhK expect_referenced_by_name}jdhsexpect_referenced_by_id}jhsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j]hasnameids}(jdjjcj`jjjDjAj5j2j-j*jjjjjjjjj j j j j j j j j- j* j j exampleNj j j j j[jXu nametypes}(jdjcjjDj5j-jjjjj j j j j- j jj j j[uh}(jjj`jjj&jAjj2jGj*j=jj8jjjjjjj jj j j j j j j* j j j0 j j} j j j j6 j j j j5 jXj jPj u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages](hsystem_message)}(hhh]j)}(h*Duplicate implicit target name: "example".h]h.Duplicate implicit target name: “example”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j alevelKtypeINFOsourcehnjlineMuh1jhj6 hhhhhMubj)}(hhh]j)}(h*Duplicate implicit target name: "example".h]h.Duplicate implicit target name: “example”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j alevelKtypej sourcehnjlineMuh1jhj5 hhhhhMubj)}(hhh]j)}(h*Duplicate implicit target name: "example".h]h.Duplicate implicit target name: “example”.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]jPalevelKtypej sourcehnjlineMuh1jhj hhhhhMubetransform_messages]j)}(hhh]j)}(hhh]h9Hyperlink target "devtools-coccinelle" is not referenced.}hjKsbah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]levelKtypej sourcehnjlineKuh1juba transformerN include_log] decorationNhhub.