€•¥/Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ#/translations/zh_CN/bpf/clang-notes”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/zh_TW/bpf/clang-notes”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/it_IT/bpf/clang-notes”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ja_JP/bpf/clang-notes”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/ko_KR/bpf/clang-notes”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/pt_BR/bpf/clang-notes”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ#/translations/sp_SP/bpf/clang-notes”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtopic”“”)”}”(hŒ Contents ”h]”(hŒtitle”“”)”}”(hŒContents”h]”hŒContents”…””}”(hh½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h»hh·h³Œ=/var/lib/git/docbuild/linux/Documentation/bpf/clang-notes.rst”h´KubhŒ bullet_list”“”)”}”(hhh]”hŒ list_item”“”)”}”(hhh]”(hŒ paragraph”“”)”}”(hhh]”hŒ reference”“”)”}”(hhh]”(hŒ generated”“”)”}”(hhh]”hŒ1   ”…””}”(hhâh²hh³Nh´Nubah}”(h]”h ]”Œsectnum”ah"]”h$]”h&]”uh1hàh³Nh´NhhÝubhŒClang implementation notes”…””}”(hhÝh²hh³Nh´Nubeh}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œrefid”Œclang-implementation-notes”uh1hÛhhØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÖhhÓubhÍ)”}”(hhh]”(hÒ)”}”(hhh]”h×)”}”(hhh]”hÜ)”}”(hhh]”(há)”}”(hhh]”hŒ 1.1   ”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàh³Nh´Nhj ubhŒVersions”…””}”(hj h²hh³Nh´Nubeh}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œversions”uh1hÛhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÖhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjubhÒ)”}”(hhh]”h×)”}”(hhh]”hÜ)”}”(hhh]”(há)”}”(hhh]”hŒ 1.2   ”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàh³Nh´Nhj;ubhŒArithmetic instructions”…””}”(hj;h²hh³Nh´Nubeh}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œarithmetic-instructions”uh1hÛhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÖhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjubhÒ)”}”(hhh]”h×)”}”(hhh]”hÜ)”}”(hhh]”(há)”}”(hhh]”hŒ 1.3   ”…””}”(hjmh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàh³Nh´NhjjubhŒJump instructions”…””}”(hjjh²hh³Nh´Nubeh}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œjump-instructions”uh1hÛhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÖhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjubhÒ)”}”(hhh]”h×)”}”(hhh]”hÜ)”}”(hhh]”(há)”}”(hhh]”hŒ 1.4   ”…””}”(hjœh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàh³Nh´Nhj™ubhŒAtomic operations”…””}”(hj™h²hh³Nh´Nubeh}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œatomic-operations”uh1hÛhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÖhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÑhjubeh}”(h]”h ]”Œauto-toc”ah"]”h$]”h&]”uh1hÌhhÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÑhhÎubah}”(h]”h ]”jÅah"]”h$]”h&]”uh1hÌhh·h²hh³Nh´Nubeh}”(h]”Œcontents”ah ]”Œcontents”ah"]”Œcontents”ah$]”h&]”uh1hµh³hËh´Khhh²hubhŒsection”“”)”}”(hhh]”(h¼)”}”(hŒClang implementation notes”h]”(há)”}”(hhh]”hŒ1   ”…””}”(hjçh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàhjãh²hh³Nh´NubhŒClang implementation notes”…””}”(hjãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œauto”KŒrefid”höuh1h»hjàh²hh³hËh´Kubh×)”}”(hŒjThis document provides more details specific to the Clang/LLVM implementation of the eBPF instruction set.”h]”hŒjThis document provides more details specific to the Clang/LLVM implementation of the eBPF instruction set.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÖh³hËh´Khjàh²hubjß)”}”(hhh]”(h¼)”}”(hŒVersions”h]”(há)”}”(hhh]”hŒ 1.1   ”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàhjh²hh³Nh´NubhŒVersions”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jþKjÿj"uh1h»hjh²hh³hËh´K ubh×)”}”(hŒ[Clang defined "CPU" versions, where a CPU version of 3 corresponds to the current eBPF ISA.”h]”hŒ_Clang defined “CPU†versions, where a CPU version of 3 corresponds to the current eBPF ISA.”…””}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÖh³hËh´K hjh²hubh×)”}”(hŒYClang can select the eBPF ISA version using ``-mcpu=v3`` for example to select version 3.”h]”(hŒ,Clang can select the eBPF ISA version using ”…””}”(hj:h²hh³Nh´NubhŒliteral”“”)”}”(hŒ ``-mcpu=v3``”h]”hŒ-mcpu=v3”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj:ubhŒ! for example to select version 3.”…””}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÖh³hËh´Khjh²hubeh}”(h]”j(ah ]”h"]”Œversions”ah$]”h&]”uh1jÞhjàh²hh³hËh´K ubjß)”}”(hhh]”(h¼)”}”(hŒArithmetic instructions”h]”(há)”}”(hhh]”hŒ 1.2   ”…””}”(hjjh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàhjfh²hh³Nh´NubhŒArithmetic instructions”…””}”(hjfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jþKjÿjQuh1h»hjch²hh³hËh´Kubh×)”}”(hŒ·For CPU versions prior to 3, Clang v7.0 and later can enable ``BPF_ALU`` support with ``-Xclang -target-feature -Xclang +alu32``. In CPU version 3, support is automatically included.”h]”(hŒ=For CPU versions prior to 3, Clang v7.0 and later can enable ”…””}”(hjh²hh³Nh´NubjC)”}”(hŒ ``BPF_ALU``”h]”hŒBPF_ALU”…””}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjubhŒ support with ”…””}”(hjh²hh³Nh´NubjC)”}”(hŒ*``-Xclang -target-feature -Xclang +alu32``”h]”hŒ&-Xclang -target-feature -Xclang +alu32”…””}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjubhŒ7. In CPU version 3, support is automatically included.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÖh³hËh´Khjch²hubeh}”(h]”jWah ]”h"]”Œarithmetic instructions”ah$]”h&]”uh1jÞhjàh²hh³hËh´Kubjß)”}”(hhh]”(h¼)”}”(hŒJump instructions”h]”(há)”}”(hhh]”hŒ 1.3   ”…””}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàhj½h²hh³Nh´NubhŒJump instructions”…””}”(hj½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jþKjÿj€uh1h»hjºh²hh³hËh´Kubh×)”}”(hŒ“If ``-O0`` is used, Clang will generate the ``BPF_CALL | BPF_X | BPF_JMP`` (0x8d) instruction, which is not supported by the Linux kernel verifier.”h]”(hŒIf ”…””}”(hjØh²hh³Nh´NubjC)”}”(hŒ``-O0``”h]”hŒ-O0”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjØubhŒ" is used, Clang will generate the ”…””}”(hjØh²hh³Nh´NubjC)”}”(hŒ``BPF_CALL | BPF_X | BPF_JMP``”h]”hŒBPF_CALL | BPF_X | BPF_JMP”…””}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhjØubhŒI (0x8d) instruction, which is not supported by the Linux kernel verifier.”…””}”(hjØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÖh³hËh´Khjºh²hubeh}”(h]”j†ah ]”h"]”Œjump instructions”ah$]”h&]”uh1jÞhjàh²hh³hËh´Kubjß)”}”(hhh]”(h¼)”}”(hŒAtomic operations”h]”(há)”}”(hhh]”hŒ 1.4   ”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”hìah"]”h$]”h&]”uh1hàhjh²hh³Nh´NubhŒAtomic operations”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jþKjÿj¯uh1h»hjh²hh³hËh´Kubh×)”}”(hX\Clang can generate atomic instructions by default when ``-mcpu=v3`` is enabled. If a lower version for ``-mcpu`` is set, the only atomic instruction Clang can generate is ``BPF_ADD`` *without* ``BPF_FETCH``. If you need to enable the atomics features, while keeping a lower ``-mcpu`` version, you can use ``-Xclang -target-feature -Xclang +alu32``.”h]”(hŒ7Clang can generate atomic instructions by default when ”…””}”(hj/h²hh³Nh´NubjC)”}”(hŒ ``-mcpu=v3``”h]”hŒ-mcpu=v3”…””}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj/ubhŒ$ is enabled. If a lower version for ”…””}”(hj/h²hh³Nh´NubjC)”}”(hŒ ``-mcpu``”h]”hŒ-mcpu”…””}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj/ubhŒ; is set, the only atomic instruction Clang can generate is ”…””}”(hj/h²hh³Nh´NubjC)”}”(hŒ ``BPF_ADD``”h]”hŒBPF_ADD”…””}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj/ubhŒ ”…””}”(hj/h²hh³Nh´NubhŒemphasis”“”)”}”(hŒ *without*”h]”hŒwithout”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhj/ubhŒ ”…””}”hj/sbjC)”}”(hŒ ``BPF_FETCH``”h]”hŒ BPF_FETCH”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj/ubhŒD. If you need to enable the atomics features, while keeping a lower ”…””}”(hj/h²hh³Nh´NubjC)”}”(hŒ ``-mcpu``”h]”hŒ-mcpu”…””}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj/ubhŒ version, you can use ”…””}”(hj/h²hh³Nh´NubjC)”}”(hŒ*``-Xclang -target-feature -Xclang +alu32``”h]”hŒ&-Xclang -target-feature -Xclang +alu32”…””}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jBhj/ubhŒ.”…””}”(hj/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÖh³hËh´K hjh²hubeh}”(h]”jµah ]”h"]”Œatomic operations”ah$]”h&]”uh1jÞhjàh²hh³hËh´Kubeh}”(h]”hüah ]”h"]”Œclang implementation notes”ah$]”h&]”uh1jÞhhh²hh³hËh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hËuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h»NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jîŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hËŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÛj×jÈhüj`j(j·jWjj†jÁjµuŒ nametypes”}”(jÛ‰jȉj`‰j·‰j‰jÁ‰uh}”(j×h·hüjàj(jjWjcj†jºjµjhöhÝj"j jQj;j€jjj¯j™uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jüKs…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.