€•vEŒ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/riscv/uabi”Œ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/riscv/uabi”Œ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/riscv/uabi”Œ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/riscv/uabi”Œ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/riscv/uabi”Œ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/riscv/uabi”Œ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/riscv/uabi”Œ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”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ=/var/lib/git/docbuild/linux/Documentation/arch/riscv/uabi.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒRISC-V Linux User ABI”h]”hŒRISC-V Linux User ABI”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ$ISA string ordering in /proc/cpuinfo”h]”hŒ$ISA string ordering in /proc/cpuinfo”…””}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒ±The canonical order of ISA extension names in the ISA string is defined in Chapter 27 of the RISC-V Instruction Set Manual Volume I Unprivileged ISA (Document Version 20191213).”h]”hŒ±The canonical order of ISA extension names in the ISA string is defined in Chapter 27 of the RISC-V Instruction Set Manual Volume I Unprivileged ISA (Document Version 20191213).”…””}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhï)”}”(hŒThe specification uses vague wording, such as should, when it comes to ordering, so for our purposes the following rules apply:”h]”hŒThe specification uses vague wording, such as should, when it comes to ordering, so for our purposes the following rules apply:”…””}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubhŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒcSingle-letter extensions come first, in canonical order. The canonical order is "IMAFDQLCBKJTPVH". ”h]”hï)”}”(hŒbSingle-letter extensions come first, in canonical order. The canonical order is "IMAFDQLCBKJTPVH".”h]”hŒfSingle-letter extensions come first, in canonical order. The canonical order is “IMAFDQLCBKJTPVHâ€.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)”}”(hŒVAll multi-letter extensions will be separated from other extensions by an underscore. ”h]”hï)”}”(hŒUAll multi-letter extensions will be separated from other extensions by an underscore.”h]”hŒUAll multi-letter extensions will be separated from other extensions by an underscore.”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)”}”(hŒŽAdditional standard extensions (starting with 'Z') will be sorted after single-letter extensions and before any higher-privileged extensions. ”h]”hï)”}”(hŒAdditional standard extensions (starting with 'Z') will be sorted after single-letter extensions and before any higher-privileged extensions.”h]”hŒ‘Additional standard extensions (starting with ‘Z’) will be sorted after single-letter extensions and before any higher-privileged extensions.”…””}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)”}”(hX4For additional standard extensions, the first letter following the 'Z' conventionally indicates the most closely related alphabetical extension category. If multiple 'Z' extensions are named, they will be ordered first by category, in canonical order, as listed above, then alphabetically within a category. ”h]”hï)”}”(hX3For additional standard extensions, the first letter following the 'Z' conventionally indicates the most closely related alphabetical extension category. If multiple 'Z' extensions are named, they will be ordered first by category, in canonical order, as listed above, then alphabetically within a category.”h]”hX;For additional standard extensions, the first letter following the ‘Z’ conventionally indicates the most closely related alphabetical extension category. If multiple ‘Z’ extensions are named, they will be ordered first by category, in canonical order, as listed above, then alphabetically within a category.”…””}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)”}”(hŒÊStandard supervisor-level extensions (starting with 'S') will be listed after standard unprivileged extensions. If multiple supervisor-level extensions are listed, they will be ordered alphabetically. ”h]”hï)”}”(hŒÉStandard supervisor-level extensions (starting with 'S') will be listed after standard unprivileged extensions. If multiple supervisor-level extensions are listed, they will be ordered alphabetically.”h]”hŒÍStandard supervisor-level extensions (starting with ‘S’) will be listed after standard unprivileged extensions. If multiple supervisor-level extensions are listed, they will be ordered alphabetically.”…””}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)”}”(hŒÎStandard machine-level extensions (starting with 'Zxm') will be listed after any lower-privileged, standard extensions. If multiple machine-level extensions are listed, they will be ordered alphabetically. ”h]”hï)”}”(hŒÍStandard machine-level extensions (starting with 'Zxm') will be listed after any lower-privileged, standard extensions. If multiple machine-level extensions are listed, they will be ordered alphabetically.”h]”hŒÑStandard machine-level extensions (starting with ‘Zxm’) will be listed after any lower-privileged, standard extensions. If multiple machine-level extensions are listed, they will be ordered alphabetically.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K#hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj)”}”(hŒ¯Non-standard extensions (starting with 'X') will be listed after all standard extensions. If multiple non-standard extensions are listed, they will be ordered alphabetically. ”h]”hï)”}”(hŒ®Non-standard extensions (starting with 'X') will be listed after all standard extensions. If multiple non-standard extensions are listed, they will be ordered alphabetically.”h]”hŒ²Non-standard extensions (starting with ‘X’) will be listed after all standard extensions. If multiple non-standard extensions are listed, they will be ordered alphabetically.”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K'hj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j hhÝh²hh³hÇh´Kubhï)”}”(hŒ*An example string following the order is::”h]”hŒ)An example string following the order is:”…””}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K+hhÝh²hubhŒ literal_block”“”)”}”(hŒ6rv64imadc_zifoo_zigoo_zafoo_sbar_scar_zxmbaz_xqux_xrux”h]”hŒ6rv64imadc_zifoo_zigoo_zafoo_sbar_scar_zxmbaz_xqux_xrux”…””}”hjÖsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÔh³hÇh´K-hhÝh²hubeh}”(h]”Œ#isa-string-ordering-in-proc-cpuinfo”ah ]”h"]”Œ$isa string ordering in /proc/cpuinfo”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ+"isa" and "hart isa" lines in /proc/cpuinfo”h]”hŒ3“isa†and “hart isa†lines in /proc/cpuinfo”…””}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjìh²hh³hÇh´K0ubhï)”}”(hXbThe "isa" line in /proc/cpuinfo describes the lowest common denominator of RISC-V ISA extensions recognized by the kernel and implemented on all harts. The "hart isa" line, in contrast, describes the set of extensions recognized by the kernel on the particular hart being described, even if those extensions may not be present on all harts in the system.”h]”hXjThe “isa†line in /proc/cpuinfo describes the lowest common denominator of RISC-V ISA extensions recognized by the kernel and implemented on all harts. The “hart isa†line, in contrast, describes the set of extensions recognized by the kernel on the particular hart being described, even if those extensions may not be present on all harts in the system.”…””}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K2hjìh²hubhï)”}”(hXÂIn both lines, the presence of an extension guarantees only that the hardware has the described capability. Additional kernel support or policy changes may be required before an extension's capability is fully usable by userspace programs. Similarly, for S-mode extensions, presence in one of these lines does not guarantee that the kernel is taking advantage of the extension, or that the feature will be visible in guest VMs managed by this kernel.”h]”hXÄIn both lines, the presence of an extension guarantees only that the hardware has the described capability. Additional kernel support or policy changes may be required before an extension’s capability is fully usable by userspace programs. Similarly, for S-mode extensions, presence in one of these lines does not guarantee that the kernel is taking advantage of the extension, or that the feature will be visible in guest VMs managed by this kernel.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K8hjìh²hubhï)”}”(hŒåInversely, the absence of an extension in these lines does not necessarily mean the hardware does not support that feature. The running kernel may not recognize the extension, or may have deliberately removed it from the listing.”h]”hŒåInversely, the absence of an extension in these lines does not necessarily mean the hardware does not support that feature. The running kernel may not recognize the extension, or may have deliberately removed it from the listing.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K?hjìh²hubeh}”(h]”Œ&isa-and-hart-isa-lines-in-proc-cpuinfo”ah ]”h"]”Œ+"isa" and "hart isa" lines in /proc/cpuinfo”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K0ubhÉ)”}”(hhh]”(hÎ)”}”(hŒMisaligned accesses”h]”hŒMisaligned accesses”…””}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj/h²hh³hÇh´KDubhï)”}”(hŒ©Misaligned scalar accesses are supported in userspace, but they may perform poorly. Misaligned vector accesses are only supported if the Zicclsm extension is supported.”h]”hŒ©Misaligned scalar accesses are supported in userspace, but they may perform poorly. Misaligned vector accesses are only supported if the Zicclsm extension is supported.”…””}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KFhj/h²hubeh}”(h]”Œmisaligned-accesses”ah ]”h"]”Œmisaligned accesses”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KDubhÉ)”}”(hhh]”(hÎ)”}”(hŒPointer masking”h]”hŒPointer masking”…””}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjVh²hh³hÇh´KKubhï)”}”(hX`Support for pointer masking in userspace (the Supm extension) is provided via the ``PR_SET_TAGGED_ADDR_CTRL`` and ``PR_GET_TAGGED_ADDR_CTRL`` ``prctl()`` operations. Pointer masking is disabled by default. To enable it, userspace must call ``PR_SET_TAGGED_ADDR_CTRL`` with the ``PR_PMLEN`` field set to the number of mask/tag bits needed by the application. ``PR_PMLEN`` is interpreted as a lower bound; if the kernel is unable to satisfy the request, the ``PR_SET_TAGGED_ADDR_CTRL`` operation will fail. The actual number of tag bits is returned in ``PR_PMLEN`` by the ``PR_GET_TAGGED_ADDR_CTRL`` operation.”h]”(hŒRSupport for pointer masking in userspace (the Supm extension) is provided via the ”…””}”(hjgh²hh³Nh´NubhŒliteral”“”)”}”(hŒ``PR_SET_TAGGED_ADDR_CTRL``”h]”hŒPR_SET_TAGGED_ADDR_CTRL”…””}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒ and ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ``PR_GET_TAGGED_ADDR_CTRL``”h]”hŒPR_GET_TAGGED_ADDR_CTRL”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒ ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ ``prctl()``”h]”hŒprctl()”…””}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒW operations. Pointer masking is disabled by default. To enable it, userspace must call ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ``PR_SET_TAGGED_ADDR_CTRL``”h]”hŒPR_SET_TAGGED_ADDR_CTRL”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒ with the ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒE field set to the number of mask/tag bits needed by the application. ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒV is interpreted as a lower bound; if the kernel is unable to satisfy the request, the ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ``PR_SET_TAGGED_ADDR_CTRL``”h]”hŒPR_SET_TAGGED_ADDR_CTRL”…””}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒC operation will fail. The actual number of tag bits is returned in ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒ by the ”…””}”(hjgh²hh³Nh´Nubjp)”}”(hŒ``PR_GET_TAGGED_ADDR_CTRL``”h]”hŒPR_GET_TAGGED_ADDR_CTRL”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjgubhŒ operation.”…””}”(hjgh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KMhjVh²hubhï)”}”(hŒäAdditionally, when pointer masking is enabled (``PR_PMLEN`` is greater than 0), a tagged address ABI is supported, with the same interface and behavior as documented for AArch64 (Documentation/arch/arm64/tagged-address-abi.rst).”h]”(hŒ/Additionally, when pointer masking is enabled (”…””}”(hjh²hh³Nh´Nubjp)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1johjubhŒ© is greater than 0), a tagged address ABI is supported, with the same interface and behavior as documented for AArch64 (Documentation/arch/arm64/tagged-address-abi.rst).”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KVhjVh²hubeh}”(h]”Œpointer-masking”ah ]”h"]”Œpointer masking”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KKubeh}”(h]”Œrisc-v-linux-user-abi”ah ]”h"]”Œrisc-v linux user abi”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”Œ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”jlŒ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”}”(jFjCjéjæj,j)jSjPj>j;uŒ nametypes”}”(jF‰jé‰j,‰jS‰j>‰uh}”(jChÊjæhÝj)jìjPj/j;jVuŒ 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.