€•”CŒ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Œ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 unprivileged specification. The specification uses vague wording, such as should, when it comes to ordering, so for our purposes the following rules apply:”h]”hŒøThe canonical order of ISA extension names in the ISA string is defined in chapter 27 of the unprivileged specification. 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â€.”…””}”(hhõhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Khhñubah}”(h]”h ]”h"]”h$]”h&]”uh1hïhhìhžhhŸh³h Nubhð)”}”(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&]”uh1hïhhìhžhhŸh³h Nubhð)”}”(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.”…””}”(hj%hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Khj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hïhhìhžhhŸh³h Nubhð)”}”(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 Khj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hïhhìhžhhŸh³h Nubhð)”}”(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.”…””}”(hjUhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1hïhhìhžhhŸh³h Nubhð)”}”(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.”…””}”(hjmhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K!hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1hïhhìhžhhŸh³h Nubhð)”}”(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%hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hïhhìhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1hê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 K.ubhÛ)”}”(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 K0hjÊ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 K6hjÊ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.”…””}”(hj÷hž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 K.ubhµ)”}”(hhh]”(hº)”}”(hŒMisaligned accesses”h]”hŒMisaligned accesses”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj hžhhŸh³h KBubhÛ)”}”(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.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KDhj hžhubeh}”(h]”Œmisaligned-accesses”ah ]”h"]”Œmisaligned accesses”ah$]”h&]”uh1h´hh¶hžhhŸh³h KBubhµ)”}”(hhh]”(hº)”}”(hŒPointer masking”h]”hŒPointer masking”…””}”(hj7hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj4hžhhŸh³h KIubhÛ)”}”(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 ”…””}”(hjEhžhhŸNh NubhŒliteral”“”)”}”(hŒ``PR_SET_TAGGED_ADDR_CTRL``”h]”hŒPR_SET_TAGGED_ADDR_CTRL”…””}”(hjOhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒ and ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ``PR_GET_TAGGED_ADDR_CTRL``”h]”hŒPR_GET_TAGGED_ADDR_CTRL”…””}”(hjahžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒ ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ ``prctl()``”h]”hŒprctl()”…””}”(hjshžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒW operations. Pointer masking is disabled by default. To enable it, userspace must call ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ``PR_SET_TAGGED_ADDR_CTRL``”h]”hŒPR_SET_TAGGED_ADDR_CTRL”…””}”(hj…hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒ with the ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hj—hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒE field set to the number of mask/tag bits needed by the application. ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hj©hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒV is interpreted as a lower bound; if the kernel is unable to satisfy the request, the ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ``PR_SET_TAGGED_ADDR_CTRL``”h]”hŒPR_SET_TAGGED_ADDR_CTRL”…””}”(hj»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒC operation will fail. The actual number of tag bits is returned in ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hjÍhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒ by the ”…””}”(hjEhžhhŸNh NubjN)”}”(hŒ``PR_GET_TAGGED_ADDR_CTRL``”h]”hŒPR_GET_TAGGED_ADDR_CTRL”…””}”(hjßhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjEubhŒ operation.”…””}”(hjEhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KKhj4hž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 (”…””}”(hj÷hžhhŸNh NubjN)”}”(hŒ ``PR_PMLEN``”h]”hŒPR_PMLEN”…””}”(hjÿhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj÷ubhŒ© 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).”…””}”(hj÷hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KThj4hžhubeh}”(h]”Œpointer-masking”ah ]”h"]”Œpointer masking”ah$]”h&]”uh1h´hh¶hžhhŸh³h KIubeh}”(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”jJŒ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 jj1j.jjuŒ nametypes”}”(j$‰jljj ‰j1‰j‰uh}”(j!h¶jÄhÉjjÊj.j jj4uŒ 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.