€• ŽŒ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/arch/powerpc/dexcr”Œ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/arch/powerpc/dexcr”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/it_IT/arch/powerpc/dexcr”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ja_JP/arch/powerpc/dexcr”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ko_KR/arch/powerpc/dexcr”Œ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/arch/powerpc/dexcr”Œ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/arch/powerpc/dexcr”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ)SPDX-License-Identifier: GPL-2.0-or-later”h]”hŒ)SPDX-License-Identifier: GPL-2.0-or-later”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ@/var/lib/git/docbuild/linux/Documentation/arch/powerpc/dexcr.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ*DEXCR (Dynamic Execution Control Register)”h]”hŒ*DEXCR (Dynamic Execution Control Register)”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hX?The DEXCR is a privileged special purpose register (SPR) introduced in PowerPC ISA 3.1B (Power10) that allows per-cpu control over several dynamic execution behaviours. These behaviours include speculation (e.g., indirect branch target prediction) and enabling return-oriented programming (ROP) protection instructions.”h]”hX?The DEXCR is a privileged special purpose register (SPR) introduced in PowerPC ISA 3.1B (Power10) that allows per-cpu control over several dynamic execution behaviours. These behaviours include speculation (e.g., indirect branch target prediction) and enabling return-oriented programming (ROP) protection instructions.”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhï)�”}”(hŒùThe execution control is exposed in hardware as up to 32 bits ('aspects') in the DEXCR. Each aspect controls a certain behaviour, and can be set or cleared to enable/disable the aspect. There are several variants of the DEXCR for different purposes:”h]”hŒýThe execution control is exposed in hardware as up to 32 bits (‘aspects’) in the DEXCR. Each aspect controls a certain behaviour, and can be set or cleared to enable/disable the aspect. There are several variants of the DEXCR for different purposes:”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒNDEXCR A privileged SPR that can control aspects for userspace and kernel space”h]”(hŒterm”“”)�”}”(hŒDEXCR”h]”hŒDEXCR”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhjubhŒ definition”“”)�”}”(hhh]”hï)�”}”(hŒHA privileged SPR that can control aspects for userspace and kernel space”h]”hŒHA privileged SPR that can control aspects for userspace and kernel space”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khjubj)�”}”(hŒ€HDEXCR A hypervisor-privileged SPR that can control aspects for the hypervisor and enforce aspects for the kernel and userspace.”h]”(j)�”}”(hŒHDEXCR”h]”hŒHDEXCR”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KhjFubj()�”}”(hhh]”hï)�”}”(hŒyA hypervisor-privileged SPR that can control aspects for the hypervisor and enforce aspects for the kernel and userspace.”h]”hŒyA hypervisor-privileged SPR that can control aspects for the hypervisor and enforce aspects for the kernel and userspace.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khjh²hubj)�”}”(hŒZUDEXCR An optional ultravisor-privileged SPR that can control aspects for the ultravisor. ”h]”(j)�”}”(hŒUDEXCR”h]”hŒUDEXCR”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khjuubj()�”}”(hhh]”hï)�”}”(hŒRAn optional ultravisor-privileged SPR that can control aspects for the ultravisor.”h]”hŒRAn optional ultravisor-privileged SPR that can control aspects for the ultravisor.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´Khjh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hhÝh²hh³hÇh´Nubhï)�”}”(hXAUserspace can examine the current DEXCR state using a dedicated SPR that provides a non-privileged read-only view of the userspace DEXCR aspects. There is also an SPR that provides a read-only view of the hypervisor enforced aspects, which ORed with the userspace DEXCR view gives the effective DEXCR state for a process.”h]”hXAUserspace can examine the current DEXCR state using a dedicated SPR that provides a non-privileged read-only view of the userspace DEXCR aspects. There is also an SPR that provides a read-only view of the hypervisor enforced aspects, which ORed with the userspace DEXCR view gives the effective DEXCR state for a process.”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhhÝh²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Configuration”h]”hŒ Configuration”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÀh²hh³hÇh´K%ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒprctl”h]”hŒprctl”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÑh²hh³hÇh´K(ubhï)�”}”(hŒ­A process can control its own userspace DEXCR value using the ``PR_PPC_GET_DEXCR`` and ``PR_PPC_SET_DEXCR`` pair of :manpage:`prctl(2)` commands. These calls have the form::”h]”(hŒ>A process can control its own userspace DEXCR value using the ”…”�”}”(hjâh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``PR_PPC_GET_DEXCR``”h]”hŒPR_PPC_GET_DEXCR”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjâubhŒ and ”…”�”}”(hjâh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_SET_DEXCR``”h]”hŒPR_PPC_SET_DEXCR”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjâubhŒ pair of ”…”�”}”(hjâh²hh³Nh´NubhŒmanpage”“”)�”}”(hŒ:manpage:`prctl(2)`”h]”hŒprctl(2)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”hÅhÆŒpath”Œprctl(2)”Œpage”Œprctl”Œsection”Œ2”uh1jhjâubhŒ% commands. These calls have the form:”…”�”}”(hjâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K*hjÑh²hubhŒ literal_block”“”)�”}”(hŒ~prctl(PR_PPC_GET_DEXCR, unsigned long which, 0, 0, 0); prctl(PR_PPC_SET_DEXCR, unsigned long which, unsigned long ctrl, 0, 0);”h]”hŒ~prctl(PR_PPC_GET_DEXCR, unsigned long which, 0, 0, 0); prctl(PR_PPC_SET_DEXCR, unsigned long which, unsigned long ctrl, 0, 0);”…”�”}”hj2sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j0h³hÇh´K.hjÑh²hubhï)�”}”(hŒˆThe possible 'which' and 'ctrl' values are as follows. Note there is no relation between the 'which' value and the DEXCR aspect's index.”h]”hŒ–The possible ‘which’ and ‘ctrl’ values are as follows. Note there is no relation between the ‘which’ value and the DEXCR aspect’s index.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K1hjÑh²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jXhjUubjY)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jXhjUubjY)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jXhjUubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hï)�”}”(hŒ``prctl()`` which”h]”(jë)�”}”(hŒ ``prctl()``”h]”hŒprctl()”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj‡ubhŒ which”…”�”}”(hj‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K8hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjubjƒ)�”}”(hhh]”hï)�”}”(hŒ Aspect name”h]”hŒ Aspect name”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K9hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjubjƒ)�”}”(hhh]”hï)�”}”(hŒ Aspect index”h]”hŒ Aspect index”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K:hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjUubhŒtbody”“”)�”}”(hhh]”(j~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ``PR_PPC_DEXCR_SBHE``”h]”jë)�”}”(hjðh]”hŒPR_PPC_DEXCR_SBHE”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hjåubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ``PR_PPC_DEXCR_IBRTPD``”h]”jë)�”}”(hjGh]”hŒPR_PPC_DEXCR_IBRTPD”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K@hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj?ubjƒ)�”}”(hhh]”hï)�”}”(hŒThis aspect can be configured with PR_PPC_SET_DEXCR (get only)”h]”hŒ>This aspect can be configured with PR_PPC_SET_DEXCR (get only)”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KThjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¿ubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ``PR_PPC_DEXCR_CTRL_SET``”h]”jë)�”}”(hj h]”hŒPR_PPC_DEXCR_CTRL_SET”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KVhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjubjƒ)�”}”(hhh]”hï)�”}”(hŒ$This aspect is set / set this aspect”h]”hŒ$This aspect is set / set this aspect”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KWhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¿ubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ``PR_PPC_DEXCR_CTRL_CLEAR``”h]”jë)�”}”(hjJh]”hŒPR_PPC_DEXCR_CTRL_CLEAR”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KYhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjBubjƒ)�”}”(hhh]”hï)�”}”(hŒ(This aspect is clear / clear this aspect”h]”hŒ(This aspect is clear / clear this aspect”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KZhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¿ubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ ``PR_PPC_DEXCR_CTRL_SET_ONEXEC``”h]”jë)�”}”(hjŠh]”hŒPR_PPC_DEXCR_CTRL_SET_ONEXEC”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K\hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj‚ubjƒ)�”}”(hhh]”hï)�”}”(hŒ?This aspect will be set after exec / set this aspect after exec”h]”hŒ?This aspect will be set after exec / set this aspect after exec”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K]hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¿ubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ"``PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC``”h]”jë)�”}”(hjÊh]”hŒPR_PPC_DEXCR_CTRL_CLEAR_ONEXEC”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K_hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjÂubjƒ)�”}”(hhh]”hï)�”}”(hŒCThis aspect will be clear after exec / clear this aspect after exec”h]”hŒCThis aspect will be clear after exec / clear this aspect after exec”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K`hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jãhjZubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jShjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÑh²hh³Nh´Nubhï)�”}”(hŒ Note that”h]”hŒ Note that”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KbhjÑh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒQwhich is a plain value, not a bitmask. Aspects must be worked with individually. ”h]”hï)�”}”(hŒPwhich is a plain value, not a bitmask. Aspects must be worked with individually.”h]”hŒPwhich is a plain value, not a bitmask. Aspects must be worked with individually.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kdhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%h²hh³hÇh´Nubj))�”}”(hXuctrl is a bitmask. ``PR_PPC_GET_DEXCR`` returns both the current and onexec configuration. For example, ``PR_PPC_GET_DEXCR`` may return ``PR_PPC_DEXCR_CTRL_EDITABLE | PR_PPC_DEXCR_CTRL_SET | PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC``. This would indicate the aspect is currently set, it will be cleared when you run exec, and you can change this with the ``PR_PPC_SET_DEXCR`` prctl. ”h]”hï)�”}”(hXtctrl is a bitmask. ``PR_PPC_GET_DEXCR`` returns both the current and onexec configuration. For example, ``PR_PPC_GET_DEXCR`` may return ``PR_PPC_DEXCR_CTRL_EDITABLE | PR_PPC_DEXCR_CTRL_SET | PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC``. This would indicate the aspect is currently set, it will be cleared when you run exec, and you can change this with the ``PR_PPC_SET_DEXCR`` prctl.”h]”(hŒctrl is a bitmask. ”…”�”}”(hjFh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_GET_DEXCR``”h]”hŒPR_PPC_GET_DEXCR”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjFubhŒA returns both the current and onexec configuration. For example, ”…”�”}”(hjFh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_GET_DEXCR``”h]”hŒPR_PPC_GET_DEXCR”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjFubhŒ may return ”…”�”}”(hjFh²hh³Nh´Nubjë)�”}”(hŒW``PR_PPC_DEXCR_CTRL_EDITABLE | PR_PPC_DEXCR_CTRL_SET | PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC``”h]”hŒSPR_PPC_DEXCR_CTRL_EDITABLE | PR_PPC_DEXCR_CTRL_SET | PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjFubhŒz. This would indicate the aspect is currently set, it will be cleared when you run exec, and you can change this with the ”…”�”}”(hjFh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_SET_DEXCR``”h]”hŒPR_PPC_SET_DEXCR”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjFubhŒ prctl.”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KfhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%h²hh³hÇh´Nubj))�”}”(hX The set/clear terminology refers to setting/clearing the bit in the DEXCR. For example:: prctl(PR_PPC_SET_DEXCR, PR_PPC_DEXCR_IBRTPD, PR_PPC_DEXCR_CTRL_SET, 0, 0); will set the IBRTPD aspect bit in the DEXCR, causing indirect branch prediction to be disabled. ”h]”(hï)�”}”(hŒXThe set/clear terminology refers to setting/clearing the bit in the DEXCR. For example::”h]”hŒWThe set/clear terminology refers to setting/clearing the bit in the DEXCR. For example:”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kmhj¢ubj1)�”}”(hŒJprctl(PR_PPC_SET_DEXCR, PR_PPC_DEXCR_IBRTPD, PR_PPC_DEXCR_CTRL_SET, 0, 0);”h]”hŒJprctl(PR_PPC_SET_DEXCR, PR_PPC_DEXCR_IBRTPD, PR_PPC_DEXCR_CTRL_SET, 0, 0);”…”�”}”hj´sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j0h³hÇh´Kphj¢ubhï)�”}”(hŒ_will set the IBRTPD aspect bit in the DEXCR, causing indirect branch prediction to be disabled.”h]”hŒ_will set the IBRTPD aspect bit in the DEXCR, causing indirect branch prediction to be disabled.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Krhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%h²hh³hÇh´Nubj))�”}”(hXThe status returned by ``PR_PPC_GET_DEXCR`` represents what value the process would like applied. It does not include any alternative overrides, such as if the hypervisor is enforcing the aspect be set. To see the true DEXCR state software should read the appropriate SPRs directly. ”h]”hï)�”}”(hXThe status returned by ``PR_PPC_GET_DEXCR`` represents what value the process would like applied. It does not include any alternative overrides, such as if the hypervisor is enforcing the aspect be set. To see the true DEXCR state software should read the appropriate SPRs directly.”h]”(hŒThe status returned by ”…”�”}”(hjÚh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_GET_DEXCR``”h]”hŒPR_PPC_GET_DEXCR”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjÚubhŒï represents what value the process would like applied. It does not include any alternative overrides, such as if the hypervisor is enforcing the aspect be set. To see the true DEXCR state software should read the appropriate SPRs directly.”…”�”}”(hjÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KuhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%h²hh³hÇh´Nubj))�”}”(hŒÞThe aspect state when starting a process is copied from the parent's state on :manpage:`fork(2)`. The state is reset to a fixed value on :manpage:`execve(2)`. The PR_PPC_SET_DEXCR prctl() can control both of these values. ”h]”hï)�”}”(hŒÝThe aspect state when starting a process is copied from the parent's state on :manpage:`fork(2)`. The state is reset to a fixed value on :manpage:`execve(2)`. The PR_PPC_SET_DEXCR prctl() can control both of these values.”h]”(hŒPThe aspect state when starting a process is copied from the parent’s state on ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ:manpage:`fork(2)`”h]”hŒfork(2)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”hÅhÆj Œfork(2)”j"Œfork”j$j%uh1jhjubhŒ). The state is reset to a fixed value on ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ:manpage:`execve(2)`”h]”hŒ execve(2)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”hÅhÆj Œ execve(2)”j"Œexecve”j$j%uh1jhjubhŒ@. The PR_PPC_SET_DEXCR prctl() can control both of these values.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kzhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%h²hh³hÇh´Nubj))�”}”(hŒEThe ``*_ONEXEC`` controls do not change the current process's DEXCR. ”h]”hï)�”}”(hŒDThe ``*_ONEXEC`` controls do not change the current process's DEXCR.”h]”(hŒThe ”…”�”}”(hjDh²hh³Nh´Nubjë)�”}”(hŒ ``*_ONEXEC``”h]”hŒ*_ONEXEC”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjDubhŒ6 controls do not change the current process’s DEXCR.”…”�”}”(hjDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj%h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j#h³hÇh´KdhjÑh²hubhï)�”}”(hŒuUse ``PR_PPC_SET_DEXCR`` with one of ``PR_PPC_DEXCR_CTRL_SET`` or ``PR_PPC_DEXCR_CTRL_CLEAR`` to edit a given aspect.”h]”(hŒUse ”…”�”}”(hjrh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_SET_DEXCR``”h]”hŒPR_PPC_SET_DEXCR”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjrubhŒ with one of ”…”�”}”(hjrh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_DEXCR_CTRL_SET``”h]”hŒPR_PPC_DEXCR_CTRL_SET”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjrubhŒ or ”…”�”}”(hjrh²hh³Nh´Nubjë)�”}”(hŒ``PR_PPC_DEXCR_CTRL_CLEAR``”h]”hŒPR_PPC_DEXCR_CTRL_CLEAR”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjrubhŒ to edit a given aspect.”…”�”}”(hjrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K�hjÑh²hubhï)�”}”(hŒICommon error codes for both getting and setting the DEXCR are as follows:”h]”hŒICommon error codes for both getting and setting the DEXCR are as follows:”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K„hjÑh²hubjO)�”}”(hhh]”jT)�”}”(hhh]”(jY)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jXhjÇubjY)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jXhjÇubjy)�”}”(hhh]”j~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒError”h]”hŒError”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KŠhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjáubjƒ)�”}”(hhh]”hï)�”}”(hŒMeaning”h]”hŒMeaning”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K‹hjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÇubjä)�”}”(hhh]”(j~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ ``EINVAL``”h]”jë)�”}”(hj)h]”hŒEINVAL”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K�hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj!ubjƒ)�”}”(hhh]”hï)�”}”(hŒ)The DEXCR is not supported by the kernel.”h]”hŒ)The DEXCR is not supported by the kernel.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KŽhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hjubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ ``ENODEV``”h]”jë)�”}”(hjih]”hŒENODEV”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K�hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjaubjƒ)�”}”(hhh]”hï)�”}”(hŒLThe aspect is not recognised by the kernel or not supported by the hardware.”h]”hŒLThe aspect is not recognised by the kernel or not supported by the hardware.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K‘hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jãhjÇubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jShjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÑh²hh³Nh´Nubhï)�”}”(hŒ?``PR_PPC_SET_DEXCR`` may also report the following error codes:”h]”(jë)�”}”(hŒ``PR_PPC_SET_DEXCR``”h]”hŒPR_PPC_SET_DEXCR”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj´ubhŒ+ may also report the following error codes:”…”�”}”(hj´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K”hjÑh²hubjO)�”}”(hhh]”jT)�”}”(hhh]”(jY)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jXhjÓubjY)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jXhjÓubjy)�”}”(hhh]”j~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒError”h]”hŒError”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kšhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjíubjƒ)�”}”(hhh]”hï)�”}”(hŒMeaning”h]”hŒMeaning”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K›hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhjÓubjä)�”}”(hhh]”(j~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ ``EINVAL``”h]”jë)�”}”(hj5 h]”hŒEINVAL”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K�hj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj- ubjƒ)�”}”(hhh]”hï)�”}”(hŒ+The ctrl value contains unrecognised flags.”h]”hŒ+The ctrl value contains unrecognised flags.”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KžhjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj- ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj* ubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ ``EINVAL``”h]”jë)�”}”(hju h]”hŒEINVAL”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjm ubjƒ)�”}”(hhh]”hï)�”}”(hŒnThe ctrl value contains mutually conflicting flags (e.g., ``PR_PPC_DEXCR_CTRL_SET | PR_PPC_DEXCR_CTRL_CLEAR``)”h]”(hŒ:The ctrl value contains mutually conflicting flags (e.g., ”…”�”}”(hj“ h²hh³Nh´Nubjë)�”}”(hŒ3``PR_PPC_DEXCR_CTRL_SET | PR_PPC_DEXCR_CTRL_CLEAR``”h]”hŒ/PR_PPC_DEXCR_CTRL_SET | PR_PPC_DEXCR_CTRL_CLEAR”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj“ ubhŒ)”…”�”}”(hj“ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¡hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjm ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj* ubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ ``EPERM``”h]”jë)�”}”(hjÇ h]”hŒEPERM”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¤hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj¿ ubjƒ)�”}”(hhh]”hï)�”}”(hŒrThis aspect cannot be modified with prctl() (check for the PR_PPC_DEXCR_CTRL_EDITABLE flag with PR_PPC_GET_DEXCR).”h]”hŒrThis aspect cannot be modified with prctl() (check for the PR_PPC_DEXCR_CTRL_EDITABLE flag with PR_PPC_GET_DEXCR).”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¥hjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj* ubj~)�”}”(hhh]”(jƒ)�”}”(hhh]”hï)�”}”(hŒ ``EPERM``”h]”jë)�”}”(hj h]”hŒEPERM”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¨hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjÿ ubjƒ)�”}”(hhh]”hï)�”}”(hŒËThe process does not have sufficient privilege to perform the operation. For example, clearing NPHIE on exec is a privileged operation (a process can still clear its own NPHIE aspect without privileges).”h]”hŒËThe process does not have sufficient privilege to perform the operation. For example, clearing NPHIE on exec is a privileged operation (a process can still clear its own NPHIE aspect without privileges).”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K©hj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚hjÿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j}hj* ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jãhjÓubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jShjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÑh²hh³Nh´Nubhï)�”}”(hXNThis interface allows a process to control its own DEXCR aspects, and also set the initial DEXCR value for any children in its process tree (up to the next child to use an ``*_ONEXEC`` control). This allows fine-grained control over the default value of the DEXCR, for example allowing containers to run with different default values.”h]”(hŒ¬This interface allows a process to control its own DEXCR aspects, and also set the initial DEXCR value for any children in its process tree (up to the next child to use an ”…”�”}”(hjR h²hh³Nh´Nubjë)�”}”(hŒ ``*_ONEXEC``”h]”hŒ*_ONEXEC”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhjR ubhŒ– control). This allows fine-grained control over the default value of the DEXCR, for example allowing containers to run with different default values.”…”�”}”(hjR h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K­hjÑh²hubeh}”(h]”Œprctl”ah ]”h"]”Œprctl”ah$]”h&]”uh1hÈhjÀh²hh³hÇh´K(ubeh}”(h]”Œ configuration”ah ]”h"]”Œ configuration”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K%ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒcoredump and ptrace”h]”hŒcoredump and ptrace”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‚ h²hh³hÇh´Kµubhï)�”}”(hX7The userspace values of the DEXCR and HDEXCR (in this order) are exposed under ``NT_PPC_DEXCR``. These are each 64 bits and readonly, and are intended to assist with core dumps. The DEXCR may be made writable in future. The top 32 bits of both registers (corresponding to the non-userspace bits) are masked off.”h]”(hŒOThe userspace values of the DEXCR and HDEXCR (in this order) are exposed under ”…”�”}”(hj“ h²hh³Nh´Nubjë)�”}”(hŒ``NT_PPC_DEXCR``”h]”hŒ NT_PPC_DEXCR”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj“ ubhŒØ. These are each 64 bits and readonly, and are intended to assist with core dumps. The DEXCR may be made writable in future. The top 32 bits of both registers (corresponding to the non-userspace bits) are masked off.”…”�”}”(hj“ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K·hj‚ h²hubhï)�”}”(hXmIf the kernel config ``CONFIG_CHECKPOINT_RESTORE`` is enabled, then ``NT_PPC_HASHKEYR`` is available and exposes the HASHKEYR value of the process for reading and writing. This is a tradeoff between increased security and checkpoint/restore support: a process should normally have no need to know its secret key, but restoring a process requires setting its original key. The key therefore appears in core dumps, and an attacker may be able to retrieve it from a coredump and effectively bypass ROP protection on any threads that share this key (potentially all threads from the same parent that have not run ``exec()``).”h]”(hŒIf the kernel config ”…”�”}”(hj³ h²hh³Nh´Nubjë)�”}”(hŒ``CONFIG_CHECKPOINT_RESTORE``”h]”hŒCONFIG_CHECKPOINT_RESTORE”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj³ ubhŒ is enabled, then ”…”�”}”(hj³ h²hh³Nh´Nubjë)�”}”(hŒ``NT_PPC_HASHKEYR``”h]”hŒNT_PPC_HASHKEYR”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj³ ubhX  is available and exposes the HASHKEYR value of the process for reading and writing. This is a tradeoff between increased security and checkpoint/restore support: a process should normally have no need to know its secret key, but restoring a process requires setting its original key. The key therefore appears in core dumps, and an attacker may be able to retrieve it from a coredump and effectively bypass ROP protection on any threads that share this key (potentially all threads from the same parent that have not run ”…”�”}”(hj³ h²hh³Nh´Nubjë)�”}”(hŒ ``exec()``”h]”hŒexec()”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jêhj³ ubhŒ).”…”�”}”(hj³ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¼hj‚ h²hubeh}”(h]”Œcoredump-and-ptrace”ah ]”h"]”Œcoredump and ptrace”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kµubeh}”(h]”Œ(dexcr-dynamic-execution-control-register”ah ]”h"]”Œ*dexcr (dynamic execution control register)”ah$]”h&]”uh1hÈ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”j‚Œ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½jºj j| jw jt jü jù uŒ nametypes”}”(j ‰j½‰j ‰jw ‰jü ‰uh}”(j hÊjºhÝj| jÀjt jÑjù 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”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.