€•Œ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/arm64/sme”Œ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/arm64/sme”Œ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/arm64/sme”Œ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/arm64/sme”Œ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/arm64/sme”Œ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/arm64/sme”Œ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/arm64/sme”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ3Scalable Matrix Extension support for AArch64 Linux”h]”hŒ3Scalable Matrix Extension support for AArch64 Linux”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ, &iov). ”h]”(hÌ)�”}”(hŒüDebuggers should restrict themselves to interacting with the target via the NT_ARM_SVE, NT_ARM_SSVE, NT_ARM_ZA and NT_ARM_ZT regsets. The recommended way of detecting support for these regsets is to connect to a target process first and then attempt a”h]”hŒüDebuggers should restrict themselves to interacting with the target via the NT_ARM_SVE, NT_ARM_SSVE, NT_ARM_ZA and NT_ARM_ZT regsets. The recommended way of detecting support for these regsets is to connect to a target process first and then attempt a”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K, &iov). ”h]”hÌ)�”}”(hŒ5ptrace(PTRACE_GETREGSET, pid, NT_ARM_, &iov).”h]”hŒ5ptrace(PTRACE_GETREGSET, pid, NT_ARM_, &iov).”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KAhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´KAhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒüWhenever ZA register values are exchanged in memory between userspace and the kernel, the register value is encoded in memory as a series of horizontal vectors from 0 to VL/8-1 stored in the same endianness invariant format as is used for SVE vectors. ”h]”hÌ)�”}”(hŒûWhenever ZA register values are exchanged in memory between userspace and the kernel, the register value is encoded in memory as a series of horizontal vectors from 0 to VL/8-1 stored in the same endianness invariant format as is used for SVE vectors.”h]”hŒûWhenever ZA register values are exchanged in memory between userspace and the kernel, the register value is encoded in memory as a series of horizontal vectors from 0 to VL/8-1 stored in the same endianness invariant format as is used for SVE vectors.”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KChjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ˜On thread creation PSTATE.ZA and TPIDR2_EL0 are preserved unless CLONE_VM is specified, in which case PSTATE.ZA is set to 0 and TPIDR2_EL0 is set to 0. ”h]”hÌ)�”}”(hŒ—On thread creation PSTATE.ZA and TPIDR2_EL0 are preserved unless CLONE_VM is specified, in which case PSTATE.ZA is set to 0 and TPIDR2_EL0 is set to 0.”h]”hŒ—On thread creation PSTATE.ZA and TPIDR2_EL0 are preserved unless CLONE_VM is specified, in which case PSTATE.ZA is set to 0 and TPIDR2_EL0 is set to 0.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KHhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jh³hÊh´Khh÷h²hubeh}”(h]”Œgeneral”ah ]”h"]”Œ 1. general”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ2. Vector lengths”h]”hŒ2. Vector lengths”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj;h²hh³hÊh´KLubhÌ)�”}”(hŒòSME defines a second vector length similar to the SVE vector length which controls the size of the streaming mode SVE vectors and the ZA matrix array. The ZA matrix is square with each side having as many bytes as a streaming mode SVE vector.”h]”hŒòSME defines a second vector length similar to the SVE vector length which controls the size of the streaming mode SVE vectors and the ZA matrix array. The ZA matrix is square with each side having as many bytes as a streaming mode SVE vector.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KNhj;h²hubeh}”(h]”Œvector-lengths”ah ]”h"]”Œ2. vector lengths”ah$]”h&]”uh1hµhh·h²hh³hÊh´KLubh¶)�”}”(hhh]”(h»)�”}”(hŒ3. System call behaviour”h]”hŒ3. System call behaviour”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjbh²hh³hÊh´KUubj )�”}”(hhh]”(j)�”}”(hŒzOn syscall PSTATE.ZA is preserved, if PSTATE.ZA==1 then the contents of the ZA matrix and ZTn (if present) are preserved. ”h]”hÌ)�”}”(hŒyOn syscall PSTATE.ZA is preserved, if PSTATE.ZA==1 then the contents of the ZA matrix and ZTn (if present) are preserved.”h]”hŒyOn syscall PSTATE.ZA is preserved, if PSTATE.ZA==1 then the contents of the ZA matrix and ZTn (if present) are preserved.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KWhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsh²hh³hÊh´Nubj)�”}”(hŒhOn syscall PSTATE.SM will be cleared and the SVE registers will be handled as per the standard SVE ABI. ”h]”hÌ)�”}”(hŒgOn syscall PSTATE.SM will be cleared and the SVE registers will be handled as per the standard SVE ABI.”h]”hŒgOn syscall PSTATE.SM will be cleared and the SVE registers will be handled as per the standard SVE ABI.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KZhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsh²hh³hÊh´Nubj)�”}”(hŒhNone of the SVE registers, ZA or ZTn are used to pass arguments to or receive results from any syscall. ”h]”hÌ)�”}”(hŒgNone of the SVE registers, ZA or ZTn are used to pass arguments to or receive results from any syscall.”h]”hŒgNone of the SVE registers, ZA or ZTn are used to pass arguments to or receive results from any syscall.”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K]hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsh²hh³hÊh´Nubj)�”}”(hŒYOn process creation (eg, clone()) the newly created process will have PSTATE.SM cleared. ”h]”hÌ)�”}”(hŒXOn process creation (eg, clone()) the newly created process will have PSTATE.SM cleared.”h]”hŒXOn process creation (eg, clone()) the newly created process will have PSTATE.SM cleared.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K`hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsh²hh³hÊh´Nubj)�”}”(hXAll other SME state of a thread, including the currently configured vector length, the state of the PR_SME_VL_INHERIT flag, and the deferred vector length (if any), is preserved across all syscalls, subject to the specific exceptions for execve() described in section 6. ”h]”hÌ)�”}”(hXAll other SME state of a thread, including the currently configured vector length, the state of the PR_SME_VL_INHERIT flag, and the deferred vector length (if any), is preserved across all syscalls, subject to the specific exceptions for execve() described in section 6.”h]”hXAll other SME state of a thread, including the currently configured vector length, the state of the PR_SME_VL_INHERIT flag, and the deferred vector length (if any), is preserved across all syscalls, subject to the specific exceptions for execve() described in section 6.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KchjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1jh³hÊh´KWhjbh²hubeh}”(h]”Œsystem-call-behaviour”ah ]”h"]”Œ3. system call behaviour”ah$]”h&]”uh1hµhh·h²hh³hÊh´KUubh¶)�”}”(hhh]”(h»)�”}”(hŒ4. Signal handling”h]”hŒ4. Signal handling”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjüh²hh³hÊh´Kjubj )�”}”(hhh]”(j)�”}”(hŒMSignal handlers are invoked with PSTATE.SM=0, PSTATE.ZA=0, and TPIDR2_EL0=0. ”h]”hÌ)�”}”(hŒLSignal handlers are invoked with PSTATE.SM=0, PSTATE.ZA=0, and TPIDR2_EL0=0.”h]”hŒLSignal handlers are invoked with PSTATE.SM=0, PSTATE.ZA=0, and TPIDR2_EL0=0.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ‰A new signal frame record TPIDR2_MAGIC is added formatted as a struct tpidr2_context to allow access to TPIDR2_EL0 from signal handlers. ”h]”hÌ)�”}”(hŒˆA new signal frame record TPIDR2_MAGIC is added formatted as a struct tpidr2_context to allow access to TPIDR2_EL0 from signal handlers.”h]”hŒˆA new signal frame record TPIDR2_MAGIC is added formatted as a struct tpidr2_context to allow access to TPIDR2_EL0 from signal handlers.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Knhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ^A new signal frame record za_context encodes the ZA register contents on signal delivery. [1] ”h]”hÌ)�”}”(hŒ]A new signal frame record za_context encodes the ZA register contents on signal delivery. [1]”h]”hŒ]A new signal frame record za_context encodes the ZA register contents on signal delivery. [1]”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kqhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ|The signal frame record for ZA always contains basic metadata, in particular the thread's vector length (in za_context.vl). ”h]”hÌ)�”}”(hŒ{The signal frame record for ZA always contains basic metadata, in particular the thread's vector length (in za_context.vl).”h]”hŒ}The signal frame record for ZA always contains basic metadata, in particular the thread’s vector length (in za_context.vl).”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KthjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒñThe ZA matrix may or may not be included in the record, depending on the value of PSTATE.ZA. The registers are present if and only if: za_context.head.size >= ZA_SIG_CONTEXT_SIZE(sve_vq_from_vl(za_context.vl)) in which case PSTATE.ZA == 1. ”h]”hÌ)�”}”(hŒðThe ZA matrix may or may not be included in the record, depending on the value of PSTATE.ZA. The registers are present if and only if: za_context.head.size >= ZA_SIG_CONTEXT_SIZE(sve_vq_from_vl(za_context.vl)) in which case PSTATE.ZA == 1.”h]”hŒðThe ZA matrix may or may not be included in the record, depending on the value of PSTATE.ZA. The registers are present if and only if: za_context.head.size >= ZA_SIG_CONTEXT_SIZE(sve_vq_from_vl(za_context.vl)) in which case PSTATE.ZA == 1.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kwhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒšIf matrix data is present, the remainder of the record has a vl-dependent size and layout. Macros ZA_SIG_* are defined [1] to facilitate access to them. ”h]”hÌ)�”}”(hŒ™If matrix data is present, the remainder of the record has a vl-dependent size and layout. Macros ZA_SIG_* are defined [1] to facilitate access to them.”h]”hŒ™If matrix data is present, the remainder of the record has a vl-dependent size and layout. Macros ZA_SIG_* are defined [1] to facilitate access to them.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒfThe matrix is stored as a series of horizontal vectors in the same format as is used for SVE vectors. ”h]”hÌ)�”}”(hŒeThe matrix is stored as a series of horizontal vectors in the same format as is used for SVE vectors.”h]”hŒeThe matrix is stored as a series of horizontal vectors in the same format as is used for SVE vectors.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K€hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hXIf the ZA context is too big to fit in sigcontext.__reserved[], then extra space is allocated on the stack, an extra_context record is written in __reserved[] referencing this space. za_context is then written in the extra space. Refer to [1] for further details about this mechanism. ”h]”hÌ)�”}”(hXIf the ZA context is too big to fit in sigcontext.__reserved[], then extra space is allocated on the stack, an extra_context record is written in __reserved[] referencing this space. za_context is then written in the extra space. Refer to [1] for further details about this mechanism.”h]”hXIf the ZA context is too big to fit in sigcontext.__reserved[], then extra space is allocated on the stack, an extra_context record is written in __reserved[] referencing this space. za_context is then written in the extra space. Refer to [1] for further details about this mechanism.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hŒ[If ZTn is supported and PSTATE.ZA==1 then a signal frame record for ZTn will be generated. ”h]”hÌ)�”}”(hŒZIf ZTn is supported and PSTATE.ZA==1 then a signal frame record for ZTn will be generated.”h]”hŒZIf ZTn is supported and PSTATE.ZA==1 then a signal frame record for ZTn will be generated.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KˆhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj)�”}”(hX The signal record for ZTn has magic ZT_MAGIC (0x5a544e01) and consists of a standard signal frame header followed by a struct zt_context specifying the number of ZTn registers supported by the system, then zt_context.nregs blocks of 64 bytes of data per register. ”h]”hÌ)�”}”(hXThe signal record for ZTn has magic ZT_MAGIC (0x5a544e01) and consists of a standard signal frame header followed by a struct zt_context specifying the number of ZTn registers supported by the system, then zt_context.nregs blocks of 64 bytes of data per register.”h]”hXThe signal record for ZTn has magic ZT_MAGIC (0x5a544e01) and consists of a standard signal frame header followed by a struct zt_context specifying the number of ZTn registers supported by the system, then zt_context.nregs blocks of 64 bytes of data per register.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1jh³hÊh´Klhjüh²hubeh}”(h]”Œsignal-handling”ah ]”h"]”Œ4. signal handling”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kjubh¶)�”}”(hhh]”(h»)�”}”(hŒ5. Signal return”h]”hŒ5. Signal return”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K’ubhÌ)�”}”(hŒ%When returning from a signal handler:”h]”hŒ%When returning from a signal handler:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K”hjh²hubj )�”}”(hhh]”(j)�”}”(hŒ«If there is no za_context record in the signal frame, or if the record is present but contains no register data as described in the previous section, then ZA is disabled. ”h]”hÌ)�”}”(hŒªIf there is no za_context record in the signal frame, or if the record is present but contains no register data as described in the previous section, then ZA is disabled.”h]”hŒªIf there is no za_context record in the signal frame, or if the record is present but contains no register data as described in the previous section, then ZA is disabled.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K–hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj-h²hh³hÊh´Nubj)�”}”(hŒŽIf za_context is present in the signal frame and contains matrix data then PSTATE.ZA is set to 1 and ZA is populated with the specified data. ”h]”hÌ)�”}”(hŒ�If za_context is present in the signal frame and contains matrix data then PSTATE.ZA is set to 1 and ZA is populated with the specified data.”h]”hŒ�If za_context is present in the signal frame and contains matrix data then PSTATE.ZA is set to 1 and ZA is populated with the specified data.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KšhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj-h²hh³hÊh´Nubj)�”}”(hŒ×The vector length cannot be changed via signal return. If za_context.vl in the signal frame does not match the current vector length, the signal return attempt is treated as illegal, resulting in a forced SIGSEGV. ”h]”hÌ)�”}”(hŒÖThe vector length cannot be changed via signal return. If za_context.vl in the signal frame does not match the current vector length, the signal return attempt is treated as illegal, resulting in a forced SIGSEGV.”h]”hŒÖThe vector length cannot be changed via signal return. If za_context.vl in the signal frame does not match the current vector length, the signal return attempt is treated as illegal, resulting in a forced SIGSEGV.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj-h²hh³hÊh´Nubj)�”}”(hŒ‚If ZTn is not supported or PSTATE.ZA==0 then it is illegal to have a signal frame record for ZTn, resulting in a forced SIGSEGV. ”h]”hÌ)�”}”(hŒ€If ZTn is not supported or PSTATE.ZA==0 then it is illegal to have a signal frame record for ZTn, resulting in a forced SIGSEGV.”h]”hŒ€If ZTn is not supported or PSTATE.ZA==0 then it is illegal to have a signal frame record for ZTn, resulting in a forced SIGSEGV.”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¡hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj-h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1jh³hÊh´K–hjh²hubeh}”(h]”Œ signal-return”ah ]”h"]”Œ5. signal return”ah$]”h&]”uh1hµhh·h²hh³hÊh´K’ubh¶)�”}”(hhh]”(h»)�”}”(hŒ6. prctl extensions”h]”hŒ6. prctl extensions”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjžh²hh³hÊh´K¦ubhÌ)�”}”(hŒSSome new prctl() calls are added to allow programs to manage the SME vector length:”h]”hŒSSome new prctl() calls are added to allow programs to manage the SME vector length:”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¨hjžh²hubhÌ)�”}”(hŒ'prctl(PR_SME_SET_VL, unsigned long arg)”h]”hŒ'prctl(PR_SME_SET_VL, unsigned long arg)”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K«hjžh²hubj�)�”}”(hX“ Sets the vector length of the calling thread and related flags, where arg == vl | flags. Other threads of the calling process are unaffected. vl is the desired vector length, where sve_vl_valid(vl) must be true. flags: PR_SME_VL_INHERIT Inherit the current vector length across execve(). Otherwise, the vector length is reset to the system default at execve(). (See Section 9.) PR_SME_SET_VL_ONEXEC Defer the requested vector length change until the next execve() performed by this thread. The effect is equivalent to implicit execution of the following call immediately after the next execve() (if any) by the thread: prctl(PR_SME_SET_VL, arg & ~PR_SME_SET_VL_ONEXEC) This allows launching of a new program with a different vector length, while avoiding runtime side effects in the caller. Without PR_SME_SET_VL_ONEXEC, the requested change takes effect immediately. Return value: a nonnegative on success, or a negative value on error: EINVAL: SME not supported, invalid vector length requested, or invalid flags. On success: * Either the calling thread's vector length or the deferred vector length to be applied at the next execve() by the thread (dependent on whether PR_SME_SET_VL_ONEXEC is present in arg), is set to the largest value supported by the system that is less than or equal to vl. If vl == SVE_VL_MAX, the value set will be the largest value supported by the system. * Any previously outstanding deferred vector length change in the calling thread is cancelled. * The returned value describes the resulting configuration, encoded as for PR_SME_GET_VL. The vector length reported in this value is the new current vector length for this thread if PR_SME_SET_VL_ONEXEC was not present in arg; otherwise, the reported vector length is the deferred vector length that will be applied at the next execve() by the calling thread. * Changing the vector length causes all of ZA, ZTn, P0..P15, FFR and all bits of Z0..Z31 except for Z0 bits [127:0] .. Z31 bits [127:0] to become unspecified, including both streaming and non-streaming SVE state. Calling PR_SME_SET_VL with vl equal to the thread's current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose. * Changing the vector length causes PSTATE.ZA to be cleared. Calling PR_SME_SET_VL with vl equal to the thread's current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose. ”h]”(hÌ)�”}”(hŒŽSets the vector length of the calling thread and related flags, where arg == vl | flags. Other threads of the calling process are unaffected.”h]”hŒŽSets the vector length of the calling thread and related flags, where arg == vl | flags. Other threads of the calling process are unaffected.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K­hjËubhÌ)�”}”(hŒEvl is the desired vector length, where sve_vl_valid(vl) must be true.”h]”hŒEvl is the desired vector length, where sve_vl_valid(vl) must be true.”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K°hjËubhÌ)�”}”(hŒflags:”h]”hŒflags:”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K²hjËubj�)�”}”(hXÇPR_SME_VL_INHERIT Inherit the current vector length across execve(). Otherwise, the vector length is reset to the system default at execve(). (See Section 9.) PR_SME_SET_VL_ONEXEC Defer the requested vector length change until the next execve() performed by this thread. The effect is equivalent to implicit execution of the following call immediately after the next execve() (if any) by the thread: prctl(PR_SME_SET_VL, arg & ~PR_SME_SET_VL_ONEXEC) This allows launching of a new program with a different vector length, while avoiding runtime side effects in the caller. Without PR_SME_SET_VL_ONEXEC, the requested change takes effect immediately. ”h]”(hÌ)�”}”(hŒPR_SME_VL_INHERIT”h]”hŒPR_SME_VL_INHERIT”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K´hjùubj�)�”}”(hŒ�Inherit the current vector length across execve(). Otherwise, the vector length is reset to the system default at execve(). (See Section 9.) ”h]”hÌ)�”}”(hŒŽInherit the current vector length across execve(). Otherwise, the vector length is reset to the system default at execve(). (See Section 9.)”h]”hŒŽInherit the current vector length across execve(). Otherwise, the vector length is reset to the system default at execve(). (See Section 9.)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¶hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´K¶hjùubhÌ)�”}”(hŒPR_SME_SET_VL_ONEXEC”h]”hŒPR_SME_SET_VL_ONEXEC”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kºhjùubj�)�”}”(hXÞDefer the requested vector length change until the next execve() performed by this thread. The effect is equivalent to implicit execution of the following call immediately after the next execve() (if any) by the thread: prctl(PR_SME_SET_VL, arg & ~PR_SME_SET_VL_ONEXEC) This allows launching of a new program with a different vector length, while avoiding runtime side effects in the caller. Without PR_SME_SET_VL_ONEXEC, the requested change takes effect immediately. ”h]”(hÌ)�”}”(hŒZDefer the requested vector length change until the next execve() performed by this thread.”h]”hŒZDefer the requested vector length change until the next execve() performed by this thread.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¼hj1ubhÌ)�”}”(hŒ€The effect is equivalent to implicit execution of the following call immediately after the next execve() (if any) by the thread:”h]”hŒ€The effect is equivalent to implicit execution of the following call immediately after the next execve() (if any) by the thread:”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¿hj1ubj�)�”}”(hŒ2prctl(PR_SME_SET_VL, arg & ~PR_SME_SET_VL_ONEXEC) ”h]”hÌ)�”}”(hŒ1prctl(PR_SME_SET_VL, arg & ~PR_SME_SET_VL_ONEXEC)”h]”hŒ1prctl(PR_SME_SET_VL, arg & ~PR_SME_SET_VL_ONEXEC)”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÂhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´KÂhj1ubhÌ)�”}”(hŒyThis allows launching of a new program with a different vector length, while avoiding runtime side effects in the caller.”h]”hŒyThis allows launching of a new program with a different vector length, while avoiding runtime side effects in the caller.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÄhj1ubhÌ)�”}”(hŒLWithout PR_SME_SET_VL_ONEXEC, the requested change takes effect immediately.”h]”hŒLWithout PR_SME_SET_VL_ONEXEC, the requested change takes effect immediately.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÇhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´K¼hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´K´hjËubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ™Return value: a nonnegative on success, or a negative value on error: EINVAL: SME not supported, invalid vector length requested, or invalid flags. ”h]”(hŒterm”“”)�”}”(hŒEReturn value: a nonnegative on success, or a negative value on error:”h]”hŒEReturn value: a nonnegative on success, or a negative value on error:”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jœh³hÊh´KÎhj˜ubhŒ definition”“”)�”}”(hhh]”j’)�”}”(hhh]”j—)�”}”(hŒOEINVAL: SME not supported, invalid vector length requested, or invalid flags. ”h]”(j�)�”}”(hŒ>EINVAL: SME not supported, invalid vector length requested, or”h]”hŒ>EINVAL: SME not supported, invalid vector length requested, or”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jœh³hÊh´KÎhj´ubj­)�”}”(hhh]”hÌ)�”}”(hŒinvalid flags.”h]”hŒinvalid flags.”…”�”}”(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–h³hÊh´KÎhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j–h³hÊh´KÎhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjËubhÌ)�”}”(hŒ On success:”h]”hŒ On success:”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÐhjËubj )�”}”(hhh]”(j)�”}”(hXeEither the calling thread's vector length or the deferred vector length to be applied at the next execve() by the thread (dependent on whether PR_SME_SET_VL_ONEXEC is present in arg), is set to the largest value supported by the system that is less than or equal to vl. If vl == SVE_VL_MAX, the value set will be the largest value supported by the system. ”h]”hÌ)�”}”(hXdEither the calling thread's vector length or the deferred vector length to be applied at the next execve() by the thread (dependent on whether PR_SME_SET_VL_ONEXEC is present in arg), is set to the largest value supported by the system that is less than or equal to vl. If vl == SVE_VL_MAX, the value set will be the largest value supported by the system.”h]”hXfEither the calling thread’s vector length or the deferred vector length to be applied at the next execve() by the thread (dependent on whether PR_SME_SET_VL_ONEXEC is present in arg), is set to the largest value supported by the system that is less than or equal to vl. If vl == SVE_VL_MAX, the value set will be the largest value supported by the system.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÒhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubj)�”}”(hŒ]Any previously outstanding deferred vector length change in the calling thread is cancelled. ”h]”hÌ)�”}”(hŒ\Any previously outstanding deferred vector length change in the calling thread is cancelled.”h]”hŒ\Any previously outstanding deferred vector length change in the calling thread is cancelled.”…”�”}”(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)�”}”(hXhThe returned value describes the resulting configuration, encoded as for PR_SME_GET_VL. The vector length reported in this value is the new current vector length for this thread if PR_SME_SET_VL_ONEXEC was not present in arg; otherwise, the reported vector length is the deferred vector length that will be applied at the next execve() by the calling thread. ”h]”hÌ)�”}”(hXgThe returned value describes the resulting configuration, encoded as for PR_SME_GET_VL. The vector length reported in this value is the new current vector length for this thread if PR_SME_SET_VL_ONEXEC was not present in arg; otherwise, the reported vector length is the deferred vector length that will be applied at the next execve() by the calling thread.”h]”hXgThe returned value describes the resulting configuration, encoded as for PR_SME_GET_VL. The vector length reported in this value is the new current vector length for this thread if PR_SME_SET_VL_ONEXEC was not present in arg; otherwise, the reported vector length is the deferred vector length that will be applied at the next execve() by the calling thread.”…”�”}”(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)�”}”(hXŸChanging the vector length causes all of ZA, ZTn, P0..P15, FFR and all bits of Z0..Z31 except for Z0 bits [127:0] .. Z31 bits [127:0] to become unspecified, including both streaming and non-streaming SVE state. Calling PR_SME_SET_VL with vl equal to the thread's current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose. ”h]”hÌ)�”}”(hXžChanging the vector length causes all of ZA, ZTn, P0..P15, FFR and all bits of Z0..Z31 except for Z0 bits [127:0] .. Z31 bits [127:0] to become unspecified, including both streaming and non-streaming SVE state. Calling PR_SME_SET_VL with vl equal to the thread's current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose.”h]”hX Changing the vector length causes all of ZA, ZTn, P0..P15, FFR and all bits of Z0..Z31 except for Z0 bits [127:0] .. Z31 bits [127:0] to become unspecified, including both streaming and non-streaming SVE state. Calling PR_SME_SET_VL with vl equal to the thread’s current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KãhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubj)�”}”(hXChanging the vector length causes PSTATE.ZA to be cleared. Calling PR_SME_SET_VL with vl equal to the thread's current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose. ”h]”hÌ)�”}”(hXChanging the vector length causes PSTATE.ZA to be cleared. Calling PR_SME_SET_VL with vl equal to the thread's current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose.”h]”hXChanging the vector length causes PSTATE.ZA to be cleared. Calling PR_SME_SET_VL with vl equal to the thread’s current vector length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag, does not constitute a change to the vector length for this purpose.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kêhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1jh³hÊh´KÒhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´K­hjžh²hubhÌ)�”}”(hŒprctl(PR_SME_GET_VL)”h]”hŒprctl(PR_SME_GET_VL)”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kðhjžh²hubj�)�”}”(hXDGets the vector length of the calling thread. The following flag may be OR-ed into the result: PR_SME_VL_INHERIT Vector length will be inherited across execve(). There is no way to determine whether there is an outstanding deferred vector length change (which would only normally be the case between a fork() or vfork() and the corresponding execve() in typical use). To extract the vector length from the result, bitwise and it with PR_SME_VL_LEN_MASK. Return value: a nonnegative value on success, or a negative value on error: EINVAL: SME not supported. ”h]”(hÌ)�”}”(hŒ-Gets the vector length of the calling thread.”h]”hŒ-Gets the vector length of the calling thread.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KòhjžubhÌ)�”}”(hŒ0The following flag may be OR-ed into the result:”h]”hŒ0The following flag may be OR-ed into the result:”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kôhjžubj�)�”}”(hŒHPR_SME_VL_INHERIT Vector length will be inherited across execve(). ”h]”(hÌ)�”}”(hŒPR_SME_VL_INHERIT”h]”hŒPR_SME_VL_INHERIT”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Köhj¾ubj�)�”}”(hŒ1Vector length will be inherited across execve(). ”h]”hÌ)�”}”(hŒ0Vector length will be inherited across execve().”h]”hŒ0Vector length will be inherited across execve().”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KøhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Køhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´KöhjžubhÌ)�”}”(hŒÍThere is no way to determine whether there is an outstanding deferred vector length change (which would only normally be the case between a fork() or vfork() and the corresponding execve() in typical use).”h]”hŒÍThere is no way to determine whether there is an outstanding deferred vector length change (which would only normally be the case between a fork() or vfork() and the corresponding execve() in typical use).”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KúhjžubhÌ)�”}”(hŒUTo extract the vector length from the result, bitwise and it with PR_SME_VL_LEN_MASK.”h]”hŒUTo extract the vector length from the result, bitwise and it with PR_SME_VL_LEN_MASK.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kþhjžubj’)�”}”(hhh]”j—)�”}”(hŒhReturn value: a nonnegative value on success, or a negative value on error: EINVAL: SME not supported. ”h]”(j�)�”}”(hŒKReturn value: a nonnegative value on success, or a negative value on error:”h]”hŒKReturn value: a nonnegative value on success, or a negative value on error:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jœh³hÊh´Mhj ubj­)�”}”(hhh]”hÌ)�”}”(hŒEINVAL: SME not supported.”h]”hŒEINVAL: SME not supported.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¬hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j–h³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Kòhjžh²hubeh}”(h]”Œprctl-extensions”ah ]”h"]”Œ6. prctl extensions”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¦ubh¶)�”}”(hhh]”(h»)�”}”(hŒ7. ptrace extensions”h]”hŒ7. ptrace extensions”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjPh²hh³hÊh´Mubj )�”}”(hhh]”(j)�”}”(hŒ–A new regset NT_ARM_SSVE is defined for access to streaming mode SVE state via PTRACE_GETREGSET and PTRACE_SETREGSET, this is documented in sve.rst. ”h]”hÌ)�”}”(hŒ•A new regset NT_ARM_SSVE is defined for access to streaming mode SVE state via PTRACE_GETREGSET and PTRACE_SETREGSET, this is documented in sve.rst.”h]”hŒ•A new regset NT_ARM_SSVE is defined for access to streaming mode SVE state via PTRACE_GETREGSET and PTRACE_SETREGSET, this is documented in sve.rst.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjah²hh³hÊh´Nubj)�”}”(hŒ�A new regset NT_ARM_ZA is defined for ZA state for access to ZA state via PTRACE_GETREGSET and PTRACE_SETREGSET. Refer to [2] for definitions. ”h]”(hÌ)�”}”(hŒpA new regset NT_ARM_ZA is defined for ZA state for access to ZA state via PTRACE_GETREGSET and PTRACE_SETREGSET.”h]”hŒpA new regset NT_ARM_ZA is defined for ZA state for access to ZA state via PTRACE_GETREGSET and PTRACE_SETREGSET.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj|ubhÌ)�”}”(hŒRefer to [2] for definitions.”h]”hŒRefer to [2] for definitions.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjah²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j1j2uh1jh³hÊh´MhjPh²hubhÌ)�”}”(hŒ>The regset data starts with struct user_za_header, containing:”h]”hŒ>The regset data starts with struct user_za_header, containing:”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjPh²hubj�)�”}”(hXBsize Size of the complete regset, in bytes. This depends on vl and possibly on other things in the future. If a call to PTRACE_GETREGSET requests less data than the value of size, the caller can allocate a larger buffer and retry in order to read the complete regset. max_size Maximum size in bytes that the regset can grow to for the target thread. The regset won't grow bigger than this even if the target thread changes its vector length etc. vl Target thread's current streaming vector length, in bytes. max_vl Maximum possible streaming vector length for the target thread. flags Zero or more of the following flags, which have the same meaning and behaviour as the corresponding PR_SET_VL_* flags: SME_PT_VL_INHERIT SME_PT_VL_ONEXEC (SETREGSET only). ”h]”(hÌ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¶ubj�)�”}”(hXSize of the complete regset, in bytes. This depends on vl and possibly on other things in the future. If a call to PTRACE_GETREGSET requests less data than the value of size, the caller can allocate a larger buffer and retry in order to read the complete regset. ”h]”(hÌ)�”}”(hŒeSize of the complete regset, in bytes. This depends on vl and possibly on other things in the future.”h]”hŒeSize of the complete regset, in bytes. This depends on vl and possibly on other things in the future.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÈubhÌ)�”}”(hŒ If a call to PTRACE_GETREGSET requests less data than the value of size, the caller can allocate a larger buffer and retry in order to read the complete regset.”h]”hŒ If a call to PTRACE_GETREGSET requests less data than the value of size, the caller can allocate a larger buffer and retry in order to read the complete regset.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhj¶ubhÌ)�”}”(hŒmax_size”h]”hŒmax_size”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¶ubj�)�”}”(hŒªMaximum size in bytes that the regset can grow to for the target thread. The regset won't grow bigger than this even if the target thread changes its vector length etc. ”h]”hÌ)�”}”(hŒ©Maximum size in bytes that the regset can grow to for the target thread. The regset won't grow bigger than this even if the target thread changes its vector length etc.”h]”hŒ«Maximum size in bytes that the regset can grow to for the target thread. The regset won’t grow bigger than this even if the target thread changes its vector length etc.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j�h³hÊh´Mhj¶ubhÌ)�”}”(hŒvl”h]”hŒvl”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hj¶ubj�)�”}”(hŒ;Target thread's current streaming vector length, in bytes. ”h]”hÌ)�”}”(hŒ:Target thread's current streaming vector length, in bytes.”h]”hŒ