mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
execve updates for v6.17
- Introduce regular REGSET note macros arch-wide (Dave Martin) - Remove arbitrary 4K limitation of program header size (Yin Fengwei) - Reorder function qualifiers for copy_clone_args_from_user() (Dishank Jogi) -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRSPkdeREjth1dHnSE2KwveOeQkuwUCaIVKiAAKCRA2KwveOeQk u4zBAP4zUNj2+XyixVPXCzv+Hkle6zWs7yrzdA2yLxe8Qtwj5AD+N2I6MUGcCFGW W+uWxlWTtGLDqh1CplIUqTlxMi39Og4= =vYnE -----END PGP SIGNATURE----- Merge tag 'execve-v6.17' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux Pull execve updates from Kees Cook: - Introduce regular REGSET note macros arch-wide (Dave Martin) - Remove arbitrary 4K limitation of program header size (Yin Fengwei) - Reorder function qualifiers for copy_clone_args_from_user() (Dishank Jogi) * tag 'execve-v6.17' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux: (25 commits) fork: reorder function qualifiers for copy_clone_args_from_user binfmt_elf: remove the 4k limitation of program header size binfmt_elf: Warn on missing or suspicious regset note names xtensa: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names um: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names x86/ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names sparc: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names sh: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names s390/ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names riscv: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names powerpc/ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names parisc: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names openrisc: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names nios2: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names MIPS: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names m68k: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names LoongArch: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names hexagon: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names csky: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names arm64: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names ...
This commit is contained in:
commit
d900c4ce63
@ -284,7 +284,7 @@ enum arc_getset {
|
|||||||
|
|
||||||
static const struct user_regset arc_regsets[] = {
|
static const struct user_regset arc_regsets[] = {
|
||||||
[REGSET_CMN] = {
|
[REGSET_CMN] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(unsigned long),
|
.size = sizeof(unsigned long),
|
||||||
.align = sizeof(unsigned long),
|
.align = sizeof(unsigned long),
|
||||||
@ -293,7 +293,7 @@ static const struct user_regset arc_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_ISA_ARCV2
|
#ifdef CONFIG_ISA_ARCV2
|
||||||
[REGSET_ARCV2] = {
|
[REGSET_ARCV2] = {
|
||||||
.core_note_type = NT_ARC_V2,
|
USER_REGSET_NOTE_TYPE(ARC_V2),
|
||||||
.n = ELF_ARCV2REG,
|
.n = ELF_ARCV2REG,
|
||||||
.size = sizeof(unsigned long),
|
.size = sizeof(unsigned long),
|
||||||
.align = sizeof(unsigned long),
|
.align = sizeof(unsigned long),
|
||||||
|
@ -677,7 +677,7 @@ enum arm_regset {
|
|||||||
|
|
||||||
static const struct user_regset arm_regsets[] = {
|
static const struct user_regset arm_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -689,7 +689,7 @@ static const struct user_regset arm_regsets[] = {
|
|||||||
* For the FPA regs in fpstate, the real fields are a mixture
|
* For the FPA regs in fpstate, the real fields are a mixture
|
||||||
* of sizes, so pretend that the registers are word-sized:
|
* of sizes, so pretend that the registers are word-sized:
|
||||||
*/
|
*/
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_fp) / sizeof(u32),
|
.n = sizeof(struct user_fp) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -702,7 +702,7 @@ static const struct user_regset arm_regsets[] = {
|
|||||||
* Pretend that the VFP regs are word-sized, since the FPSCR is
|
* Pretend that the VFP regs are word-sized, since the FPSCR is
|
||||||
* a single word dangling at the end of struct user_vfp:
|
* a single word dangling at the end of struct user_vfp:
|
||||||
*/
|
*/
|
||||||
.core_note_type = NT_ARM_VFP,
|
USER_REGSET_NOTE_TYPE(ARM_VFP),
|
||||||
.n = ARM_VFPREGS_SIZE / sizeof(u32),
|
.n = ARM_VFPREGS_SIZE / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
|
@ -1586,7 +1586,7 @@ enum aarch64_regset {
|
|||||||
|
|
||||||
static const struct user_regset aarch64_regsets[] = {
|
static const struct user_regset aarch64_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(struct user_pt_regs) / sizeof(u64),
|
.n = sizeof(struct user_pt_regs) / sizeof(u64),
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -1594,7 +1594,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = gpr_set
|
.set = gpr_set
|
||||||
},
|
},
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_fpsimd_state) / sizeof(u32),
|
.n = sizeof(struct user_fpsimd_state) / sizeof(u32),
|
||||||
/*
|
/*
|
||||||
* We pretend we have 32-bit registers because the fpsr and
|
* We pretend we have 32-bit registers because the fpsr and
|
||||||
@ -1607,7 +1607,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = fpr_set
|
.set = fpr_set
|
||||||
},
|
},
|
||||||
[REGSET_TLS] = {
|
[REGSET_TLS] = {
|
||||||
.core_note_type = NT_ARM_TLS,
|
USER_REGSET_NOTE_TYPE(ARM_TLS),
|
||||||
.n = 2,
|
.n = 2,
|
||||||
.size = sizeof(void *),
|
.size = sizeof(void *),
|
||||||
.align = sizeof(void *),
|
.align = sizeof(void *),
|
||||||
@ -1616,7 +1616,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||||
[REGSET_HW_BREAK] = {
|
[REGSET_HW_BREAK] = {
|
||||||
.core_note_type = NT_ARM_HW_BREAK,
|
USER_REGSET_NOTE_TYPE(ARM_HW_BREAK),
|
||||||
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -1624,7 +1624,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = hw_break_set,
|
.set = hw_break_set,
|
||||||
},
|
},
|
||||||
[REGSET_HW_WATCH] = {
|
[REGSET_HW_WATCH] = {
|
||||||
.core_note_type = NT_ARM_HW_WATCH,
|
USER_REGSET_NOTE_TYPE(ARM_HW_WATCH),
|
||||||
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -1633,7 +1633,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
[REGSET_SYSTEM_CALL] = {
|
[REGSET_SYSTEM_CALL] = {
|
||||||
.core_note_type = NT_ARM_SYSTEM_CALL,
|
USER_REGSET_NOTE_TYPE(ARM_SYSTEM_CALL),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(int),
|
.size = sizeof(int),
|
||||||
.align = sizeof(int),
|
.align = sizeof(int),
|
||||||
@ -1641,7 +1641,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = system_call_set,
|
.set = system_call_set,
|
||||||
},
|
},
|
||||||
[REGSET_FPMR] = {
|
[REGSET_FPMR] = {
|
||||||
.core_note_type = NT_ARM_FPMR,
|
USER_REGSET_NOTE_TYPE(ARM_FPMR),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -1650,7 +1650,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_ARM64_SVE
|
#ifdef CONFIG_ARM64_SVE
|
||||||
[REGSET_SVE] = { /* Scalable Vector Extension */
|
[REGSET_SVE] = { /* Scalable Vector Extension */
|
||||||
.core_note_type = NT_ARM_SVE,
|
USER_REGSET_NOTE_TYPE(ARM_SVE),
|
||||||
.n = DIV_ROUND_UP(SVE_PT_SIZE(ARCH_SVE_VQ_MAX,
|
.n = DIV_ROUND_UP(SVE_PT_SIZE(ARCH_SVE_VQ_MAX,
|
||||||
SVE_PT_REGS_SVE),
|
SVE_PT_REGS_SVE),
|
||||||
SVE_VQ_BYTES),
|
SVE_VQ_BYTES),
|
||||||
@ -1662,7 +1662,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_SME
|
#ifdef CONFIG_ARM64_SME
|
||||||
[REGSET_SSVE] = { /* Streaming mode SVE */
|
[REGSET_SSVE] = { /* Streaming mode SVE */
|
||||||
.core_note_type = NT_ARM_SSVE,
|
USER_REGSET_NOTE_TYPE(ARM_SSVE),
|
||||||
.n = DIV_ROUND_UP(SVE_PT_SIZE(SME_VQ_MAX, SVE_PT_REGS_SVE),
|
.n = DIV_ROUND_UP(SVE_PT_SIZE(SME_VQ_MAX, SVE_PT_REGS_SVE),
|
||||||
SVE_VQ_BYTES),
|
SVE_VQ_BYTES),
|
||||||
.size = SVE_VQ_BYTES,
|
.size = SVE_VQ_BYTES,
|
||||||
@ -1671,7 +1671,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = ssve_set,
|
.set = ssve_set,
|
||||||
},
|
},
|
||||||
[REGSET_ZA] = { /* SME ZA */
|
[REGSET_ZA] = { /* SME ZA */
|
||||||
.core_note_type = NT_ARM_ZA,
|
USER_REGSET_NOTE_TYPE(ARM_ZA),
|
||||||
/*
|
/*
|
||||||
* ZA is a single register but it's variably sized and
|
* ZA is a single register but it's variably sized and
|
||||||
* the ptrace core requires that the size of any data
|
* the ptrace core requires that the size of any data
|
||||||
@ -1687,7 +1687,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = za_set,
|
.set = za_set,
|
||||||
},
|
},
|
||||||
[REGSET_ZT] = { /* SME ZT */
|
[REGSET_ZT] = { /* SME ZT */
|
||||||
.core_note_type = NT_ARM_ZT,
|
USER_REGSET_NOTE_TYPE(ARM_ZT),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = ZT_SIG_REG_BYTES,
|
.size = ZT_SIG_REG_BYTES,
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -1697,7 +1697,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_PTR_AUTH
|
#ifdef CONFIG_ARM64_PTR_AUTH
|
||||||
[REGSET_PAC_MASK] = {
|
[REGSET_PAC_MASK] = {
|
||||||
.core_note_type = NT_ARM_PAC_MASK,
|
USER_REGSET_NOTE_TYPE(ARM_PAC_MASK),
|
||||||
.n = sizeof(struct user_pac_mask) / sizeof(u64),
|
.n = sizeof(struct user_pac_mask) / sizeof(u64),
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -1705,7 +1705,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
/* this cannot be set dynamically */
|
/* this cannot be set dynamically */
|
||||||
},
|
},
|
||||||
[REGSET_PAC_ENABLED_KEYS] = {
|
[REGSET_PAC_ENABLED_KEYS] = {
|
||||||
.core_note_type = NT_ARM_PAC_ENABLED_KEYS,
|
USER_REGSET_NOTE_TYPE(ARM_PAC_ENABLED_KEYS),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1714,7 +1714,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_CHECKPOINT_RESTORE
|
#ifdef CONFIG_CHECKPOINT_RESTORE
|
||||||
[REGSET_PACA_KEYS] = {
|
[REGSET_PACA_KEYS] = {
|
||||||
.core_note_type = NT_ARM_PACA_KEYS,
|
USER_REGSET_NOTE_TYPE(ARM_PACA_KEYS),
|
||||||
.n = sizeof(struct user_pac_address_keys) / sizeof(__uint128_t),
|
.n = sizeof(struct user_pac_address_keys) / sizeof(__uint128_t),
|
||||||
.size = sizeof(__uint128_t),
|
.size = sizeof(__uint128_t),
|
||||||
.align = sizeof(__uint128_t),
|
.align = sizeof(__uint128_t),
|
||||||
@ -1722,7 +1722,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = pac_address_keys_set,
|
.set = pac_address_keys_set,
|
||||||
},
|
},
|
||||||
[REGSET_PACG_KEYS] = {
|
[REGSET_PACG_KEYS] = {
|
||||||
.core_note_type = NT_ARM_PACG_KEYS,
|
USER_REGSET_NOTE_TYPE(ARM_PACG_KEYS),
|
||||||
.n = sizeof(struct user_pac_generic_keys) / sizeof(__uint128_t),
|
.n = sizeof(struct user_pac_generic_keys) / sizeof(__uint128_t),
|
||||||
.size = sizeof(__uint128_t),
|
.size = sizeof(__uint128_t),
|
||||||
.align = sizeof(__uint128_t),
|
.align = sizeof(__uint128_t),
|
||||||
@ -1733,7 +1733,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
|
#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
|
||||||
[REGSET_TAGGED_ADDR_CTRL] = {
|
[REGSET_TAGGED_ADDR_CTRL] = {
|
||||||
.core_note_type = NT_ARM_TAGGED_ADDR_CTRL,
|
USER_REGSET_NOTE_TYPE(ARM_TAGGED_ADDR_CTRL),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1743,7 +1743,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_POE
|
#ifdef CONFIG_ARM64_POE
|
||||||
[REGSET_POE] = {
|
[REGSET_POE] = {
|
||||||
.core_note_type = NT_ARM_POE,
|
USER_REGSET_NOTE_TYPE(ARM_POE),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1753,7 +1753,7 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_GCS
|
#ifdef CONFIG_ARM64_GCS
|
||||||
[REGSET_GCS] = {
|
[REGSET_GCS] = {
|
||||||
.core_note_type = NT_ARM_GCS,
|
USER_REGSET_NOTE_TYPE(ARM_GCS),
|
||||||
.n = sizeof(struct user_gcs) / sizeof(u64),
|
.n = sizeof(struct user_gcs) / sizeof(u64),
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -1943,7 +1943,7 @@ static int compat_tls_set(struct task_struct *target,
|
|||||||
|
|
||||||
static const struct user_regset aarch32_regsets[] = {
|
static const struct user_regset aarch32_regsets[] = {
|
||||||
[REGSET_COMPAT_GPR] = {
|
[REGSET_COMPAT_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = COMPAT_ELF_NGREG,
|
.n = COMPAT_ELF_NGREG,
|
||||||
.size = sizeof(compat_elf_greg_t),
|
.size = sizeof(compat_elf_greg_t),
|
||||||
.align = sizeof(compat_elf_greg_t),
|
.align = sizeof(compat_elf_greg_t),
|
||||||
@ -1951,7 +1951,7 @@ static const struct user_regset aarch32_regsets[] = {
|
|||||||
.set = compat_gpr_set
|
.set = compat_gpr_set
|
||||||
},
|
},
|
||||||
[REGSET_COMPAT_VFP] = {
|
[REGSET_COMPAT_VFP] = {
|
||||||
.core_note_type = NT_ARM_VFP,
|
USER_REGSET_NOTE_TYPE(ARM_VFP),
|
||||||
.n = VFP_STATE_SIZE / sizeof(compat_ulong_t),
|
.n = VFP_STATE_SIZE / sizeof(compat_ulong_t),
|
||||||
.size = sizeof(compat_ulong_t),
|
.size = sizeof(compat_ulong_t),
|
||||||
.align = sizeof(compat_ulong_t),
|
.align = sizeof(compat_ulong_t),
|
||||||
@ -1968,7 +1968,7 @@ static const struct user_regset_view user_aarch32_view = {
|
|||||||
|
|
||||||
static const struct user_regset aarch32_ptrace_regsets[] = {
|
static const struct user_regset aarch32_ptrace_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = COMPAT_ELF_NGREG,
|
.n = COMPAT_ELF_NGREG,
|
||||||
.size = sizeof(compat_elf_greg_t),
|
.size = sizeof(compat_elf_greg_t),
|
||||||
.align = sizeof(compat_elf_greg_t),
|
.align = sizeof(compat_elf_greg_t),
|
||||||
@ -1976,7 +1976,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
|
|||||||
.set = compat_gpr_set
|
.set = compat_gpr_set
|
||||||
},
|
},
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_ARM_VFP,
|
USER_REGSET_NOTE_TYPE(ARM_VFP),
|
||||||
.n = VFP_STATE_SIZE / sizeof(compat_ulong_t),
|
.n = VFP_STATE_SIZE / sizeof(compat_ulong_t),
|
||||||
.size = sizeof(compat_ulong_t),
|
.size = sizeof(compat_ulong_t),
|
||||||
.align = sizeof(compat_ulong_t),
|
.align = sizeof(compat_ulong_t),
|
||||||
@ -1984,7 +1984,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
|
|||||||
.set = compat_vfp_set
|
.set = compat_vfp_set
|
||||||
},
|
},
|
||||||
[REGSET_TLS] = {
|
[REGSET_TLS] = {
|
||||||
.core_note_type = NT_ARM_TLS,
|
USER_REGSET_NOTE_TYPE(ARM_TLS),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(compat_ulong_t),
|
.size = sizeof(compat_ulong_t),
|
||||||
.align = sizeof(compat_ulong_t),
|
.align = sizeof(compat_ulong_t),
|
||||||
@ -1993,7 +1993,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||||
[REGSET_HW_BREAK] = {
|
[REGSET_HW_BREAK] = {
|
||||||
.core_note_type = NT_ARM_HW_BREAK,
|
USER_REGSET_NOTE_TYPE(ARM_HW_BREAK),
|
||||||
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -2001,7 +2001,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
|
|||||||
.set = hw_break_set,
|
.set = hw_break_set,
|
||||||
},
|
},
|
||||||
[REGSET_HW_WATCH] = {
|
[REGSET_HW_WATCH] = {
|
||||||
.core_note_type = NT_ARM_HW_WATCH,
|
USER_REGSET_NOTE_TYPE(ARM_HW_WATCH),
|
||||||
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
.n = sizeof(struct user_hwdebug_state) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -2010,7 +2010,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
|
|||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
[REGSET_SYSTEM_CALL] = {
|
[REGSET_SYSTEM_CALL] = {
|
||||||
.core_note_type = NT_ARM_SYSTEM_CALL,
|
USER_REGSET_NOTE_TYPE(ARM_SYSTEM_CALL),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(int),
|
.size = sizeof(int),
|
||||||
.align = sizeof(int),
|
.align = sizeof(int),
|
||||||
|
@ -166,7 +166,7 @@ static int fpr_set(struct task_struct *target,
|
|||||||
|
|
||||||
static const struct user_regset csky_regsets[] = {
|
static const struct user_regset csky_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(struct pt_regs) / sizeof(u32),
|
.n = sizeof(struct pt_regs) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -174,7 +174,7 @@ static const struct user_regset csky_regsets[] = {
|
|||||||
.set = gpr_set,
|
.set = gpr_set,
|
||||||
},
|
},
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_fp) / sizeof(u32),
|
.n = sizeof(struct user_fp) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
|
@ -137,7 +137,7 @@ enum hexagon_regset {
|
|||||||
|
|
||||||
static const struct user_regset hexagon_regsets[] = {
|
static const struct user_regset hexagon_regsets[] = {
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(unsigned long),
|
.size = sizeof(unsigned long),
|
||||||
.align = sizeof(unsigned long),
|
.align = sizeof(unsigned long),
|
||||||
|
@ -864,7 +864,7 @@ enum loongarch_regset {
|
|||||||
|
|
||||||
static const struct user_regset loongarch64_regsets[] = {
|
static const struct user_regset loongarch64_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(elf_greg_t),
|
.size = sizeof(elf_greg_t),
|
||||||
.align = sizeof(elf_greg_t),
|
.align = sizeof(elf_greg_t),
|
||||||
@ -872,7 +872,7 @@ static const struct user_regset loongarch64_regsets[] = {
|
|||||||
.set = gpr_set,
|
.set = gpr_set,
|
||||||
},
|
},
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = ELF_NFPREG,
|
.n = ELF_NFPREG,
|
||||||
.size = sizeof(elf_fpreg_t),
|
.size = sizeof(elf_fpreg_t),
|
||||||
.align = sizeof(elf_fpreg_t),
|
.align = sizeof(elf_fpreg_t),
|
||||||
@ -880,7 +880,7 @@ static const struct user_regset loongarch64_regsets[] = {
|
|||||||
.set = fpr_set,
|
.set = fpr_set,
|
||||||
},
|
},
|
||||||
[REGSET_CPUCFG] = {
|
[REGSET_CPUCFG] = {
|
||||||
.core_note_type = NT_LOONGARCH_CPUCFG,
|
USER_REGSET_NOTE_TYPE(LOONGARCH_CPUCFG),
|
||||||
.n = 64,
|
.n = 64,
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -889,7 +889,7 @@ static const struct user_regset loongarch64_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_CPU_HAS_LSX
|
#ifdef CONFIG_CPU_HAS_LSX
|
||||||
[REGSET_LSX] = {
|
[REGSET_LSX] = {
|
||||||
.core_note_type = NT_LOONGARCH_LSX,
|
USER_REGSET_NOTE_TYPE(LOONGARCH_LSX),
|
||||||
.n = NUM_FPU_REGS,
|
.n = NUM_FPU_REGS,
|
||||||
.size = 16,
|
.size = 16,
|
||||||
.align = 16,
|
.align = 16,
|
||||||
@ -899,7 +899,7 @@ static const struct user_regset loongarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_CPU_HAS_LASX
|
#ifdef CONFIG_CPU_HAS_LASX
|
||||||
[REGSET_LASX] = {
|
[REGSET_LASX] = {
|
||||||
.core_note_type = NT_LOONGARCH_LASX,
|
USER_REGSET_NOTE_TYPE(LOONGARCH_LASX),
|
||||||
.n = NUM_FPU_REGS,
|
.n = NUM_FPU_REGS,
|
||||||
.size = 32,
|
.size = 32,
|
||||||
.align = 32,
|
.align = 32,
|
||||||
@ -909,7 +909,7 @@ static const struct user_regset loongarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_CPU_HAS_LBT
|
#ifdef CONFIG_CPU_HAS_LBT
|
||||||
[REGSET_LBT] = {
|
[REGSET_LBT] = {
|
||||||
.core_note_type = NT_LOONGARCH_LBT,
|
USER_REGSET_NOTE_TYPE(LOONGARCH_LBT),
|
||||||
.n = 5,
|
.n = 5,
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -919,7 +919,7 @@ static const struct user_regset loongarch64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||||
[REGSET_HW_BREAK] = {
|
[REGSET_HW_BREAK] = {
|
||||||
.core_note_type = NT_LOONGARCH_HW_BREAK,
|
USER_REGSET_NOTE_TYPE(LOONGARCH_HW_BREAK),
|
||||||
.n = sizeof(struct user_watch_state_v2) / sizeof(u32),
|
.n = sizeof(struct user_watch_state_v2) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -927,7 +927,7 @@ static const struct user_regset loongarch64_regsets[] = {
|
|||||||
.set = hw_break_set,
|
.set = hw_break_set,
|
||||||
},
|
},
|
||||||
[REGSET_HW_WATCH] = {
|
[REGSET_HW_WATCH] = {
|
||||||
.core_note_type = NT_LOONGARCH_HW_WATCH,
|
USER_REGSET_NOTE_TYPE(LOONGARCH_HW_WATCH),
|
||||||
.n = sizeof(struct user_watch_state_v2) / sizeof(u32),
|
.n = sizeof(struct user_watch_state_v2) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
|
@ -319,7 +319,7 @@ enum m68k_regset {
|
|||||||
|
|
||||||
static const struct user_regset m68k_user_regsets[] = {
|
static const struct user_regset m68k_user_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u16),
|
.align = sizeof(u16),
|
||||||
@ -327,7 +327,7 @@ static const struct user_regset m68k_user_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_FPU
|
#ifdef CONFIG_FPU
|
||||||
[REGSET_FPU] = {
|
[REGSET_FPU] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_m68kfp_struct) / sizeof(u32),
|
.n = sizeof(struct user_m68kfp_struct) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
|
@ -935,7 +935,7 @@ int regs_query_register_offset(const char *name)
|
|||||||
|
|
||||||
static const struct user_regset mips_regsets[] = {
|
static const struct user_regset mips_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(unsigned int),
|
.size = sizeof(unsigned int),
|
||||||
.align = sizeof(unsigned int),
|
.align = sizeof(unsigned int),
|
||||||
@ -943,7 +943,7 @@ static const struct user_regset mips_regsets[] = {
|
|||||||
.set = gpr32_set,
|
.set = gpr32_set,
|
||||||
},
|
},
|
||||||
[REGSET_DSP] = {
|
[REGSET_DSP] = {
|
||||||
.core_note_type = NT_MIPS_DSP,
|
USER_REGSET_NOTE_TYPE(MIPS_DSP),
|
||||||
.n = NUM_DSP_REGS + 1,
|
.n = NUM_DSP_REGS + 1,
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -953,7 +953,7 @@ static const struct user_regset mips_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_MIPS_FP_SUPPORT
|
#ifdef CONFIG_MIPS_FP_SUPPORT
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = ELF_NFPREG,
|
.n = ELF_NFPREG,
|
||||||
.size = sizeof(elf_fpreg_t),
|
.size = sizeof(elf_fpreg_t),
|
||||||
.align = sizeof(elf_fpreg_t),
|
.align = sizeof(elf_fpreg_t),
|
||||||
@ -961,7 +961,7 @@ static const struct user_regset mips_regsets[] = {
|
|||||||
.set = fpr_set,
|
.set = fpr_set,
|
||||||
},
|
},
|
||||||
[REGSET_FP_MODE] = {
|
[REGSET_FP_MODE] = {
|
||||||
.core_note_type = NT_MIPS_FP_MODE,
|
USER_REGSET_NOTE_TYPE(MIPS_FP_MODE),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(int),
|
.size = sizeof(int),
|
||||||
.align = sizeof(int),
|
.align = sizeof(int),
|
||||||
@ -971,7 +971,7 @@ static const struct user_regset mips_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_CPU_HAS_MSA
|
#ifdef CONFIG_CPU_HAS_MSA
|
||||||
[REGSET_MSA] = {
|
[REGSET_MSA] = {
|
||||||
.core_note_type = NT_MIPS_MSA,
|
USER_REGSET_NOTE_TYPE(MIPS_MSA),
|
||||||
.n = NUM_FPU_REGS + 1,
|
.n = NUM_FPU_REGS + 1,
|
||||||
.size = 16,
|
.size = 16,
|
||||||
.align = 16,
|
.align = 16,
|
||||||
@ -995,7 +995,7 @@ static const struct user_regset_view user_mips_view = {
|
|||||||
|
|
||||||
static const struct user_regset mips64_regsets[] = {
|
static const struct user_regset mips64_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(unsigned long),
|
.size = sizeof(unsigned long),
|
||||||
.align = sizeof(unsigned long),
|
.align = sizeof(unsigned long),
|
||||||
@ -1003,7 +1003,7 @@ static const struct user_regset mips64_regsets[] = {
|
|||||||
.set = gpr64_set,
|
.set = gpr64_set,
|
||||||
},
|
},
|
||||||
[REGSET_DSP] = {
|
[REGSET_DSP] = {
|
||||||
.core_note_type = NT_MIPS_DSP,
|
USER_REGSET_NOTE_TYPE(MIPS_DSP),
|
||||||
.n = NUM_DSP_REGS + 1,
|
.n = NUM_DSP_REGS + 1,
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -1013,7 +1013,7 @@ static const struct user_regset mips64_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_MIPS_FP_SUPPORT
|
#ifdef CONFIG_MIPS_FP_SUPPORT
|
||||||
[REGSET_FP_MODE] = {
|
[REGSET_FP_MODE] = {
|
||||||
.core_note_type = NT_MIPS_FP_MODE,
|
USER_REGSET_NOTE_TYPE(MIPS_FP_MODE),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(int),
|
.size = sizeof(int),
|
||||||
.align = sizeof(int),
|
.align = sizeof(int),
|
||||||
@ -1021,7 +1021,7 @@ static const struct user_regset mips64_regsets[] = {
|
|||||||
.set = fp_mode_set,
|
.set = fp_mode_set,
|
||||||
},
|
},
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = ELF_NFPREG,
|
.n = ELF_NFPREG,
|
||||||
.size = sizeof(elf_fpreg_t),
|
.size = sizeof(elf_fpreg_t),
|
||||||
.align = sizeof(elf_fpreg_t),
|
.align = sizeof(elf_fpreg_t),
|
||||||
@ -1031,7 +1031,7 @@ static const struct user_regset mips64_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_CPU_HAS_MSA
|
#ifdef CONFIG_CPU_HAS_MSA
|
||||||
[REGSET_MSA] = {
|
[REGSET_MSA] = {
|
||||||
.core_note_type = NT_MIPS_MSA,
|
USER_REGSET_NOTE_TYPE(MIPS_MSA),
|
||||||
.n = NUM_FPU_REGS + 1,
|
.n = NUM_FPU_REGS + 1,
|
||||||
.size = 16,
|
.size = 16,
|
||||||
.align = 16,
|
.align = 16,
|
||||||
|
@ -95,7 +95,7 @@ enum nios2_regset {
|
|||||||
|
|
||||||
static const struct user_regset nios2_regsets[] = {
|
static const struct user_regset nios2_regsets[] = {
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = NUM_PTRACE_REG,
|
.n = NUM_PTRACE_REG,
|
||||||
.size = sizeof(unsigned long),
|
.size = sizeof(unsigned long),
|
||||||
.align = sizeof(unsigned long),
|
.align = sizeof(unsigned long),
|
||||||
|
@ -124,7 +124,7 @@ enum or1k_regset {
|
|||||||
|
|
||||||
static const struct user_regset or1k_regsets[] = {
|
static const struct user_regset or1k_regsets[] = {
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -133,7 +133,7 @@ static const struct user_regset or1k_regsets[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_FPU
|
#ifdef CONFIG_FPU
|
||||||
[REGSET_FPU] = {
|
[REGSET_FPU] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct __or1k_fpu_state) / sizeof(long),
|
.n = sizeof(struct __or1k_fpu_state) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
|
@ -562,12 +562,12 @@ static int gpr_set(struct task_struct *target,
|
|||||||
|
|
||||||
static const struct user_regset native_regsets[] = {
|
static const struct user_regset native_regsets[] = {
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS, .n = ELF_NGREG,
|
USER_REGSET_NOTE_TYPE(PRSTATUS), .n = ELF_NGREG,
|
||||||
.size = sizeof(long), .align = sizeof(long),
|
.size = sizeof(long), .align = sizeof(long),
|
||||||
.regset_get = gpr_get, .set = gpr_set
|
.regset_get = gpr_get, .set = gpr_set
|
||||||
},
|
},
|
||||||
[REGSET_FP] = {
|
[REGSET_FP] = {
|
||||||
.core_note_type = NT_PRFPREG, .n = ELF_NFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG,
|
||||||
.size = sizeof(__u64), .align = sizeof(__u64),
|
.size = sizeof(__u64), .align = sizeof(__u64),
|
||||||
.regset_get = fpr_get, .set = fpr_set
|
.regset_get = fpr_get, .set = fpr_set
|
||||||
}
|
}
|
||||||
@ -629,12 +629,12 @@ static int gpr32_set(struct task_struct *target,
|
|||||||
*/
|
*/
|
||||||
static const struct user_regset compat_regsets[] = {
|
static const struct user_regset compat_regsets[] = {
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS, .n = ELF_NGREG,
|
USER_REGSET_NOTE_TYPE(PRSTATUS), .n = ELF_NGREG,
|
||||||
.size = sizeof(compat_long_t), .align = sizeof(compat_long_t),
|
.size = sizeof(compat_long_t), .align = sizeof(compat_long_t),
|
||||||
.regset_get = gpr32_get, .set = gpr32_set
|
.regset_get = gpr32_get, .set = gpr32_set
|
||||||
},
|
},
|
||||||
[REGSET_FP] = {
|
[REGSET_FP] = {
|
||||||
.core_note_type = NT_PRFPREG, .n = ELF_NFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG,
|
||||||
.size = sizeof(__u64), .align = sizeof(__u64),
|
.size = sizeof(__u64), .align = sizeof(__u64),
|
||||||
.regset_get = fpr_get, .set = fpr_set
|
.regset_get = fpr_get, .set = fpr_set
|
||||||
}
|
}
|
||||||
|
@ -568,114 +568,114 @@ static int pkey_set(struct task_struct *target, const struct user_regset *regset
|
|||||||
|
|
||||||
static const struct user_regset native_regsets[] = {
|
static const struct user_regset native_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS, .n = ELF_NGREG,
|
USER_REGSET_NOTE_TYPE(PRSTATUS), .n = ELF_NGREG,
|
||||||
.size = sizeof(long), .align = sizeof(long),
|
.size = sizeof(long), .align = sizeof(long),
|
||||||
.regset_get = gpr_get, .set = gpr_set
|
.regset_get = gpr_get, .set = gpr_set
|
||||||
},
|
},
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_PRFPREG, .n = ELF_NFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG,
|
||||||
.size = sizeof(double), .align = sizeof(double),
|
.size = sizeof(double), .align = sizeof(double),
|
||||||
.regset_get = fpr_get, .set = fpr_set
|
.regset_get = fpr_get, .set = fpr_set
|
||||||
},
|
},
|
||||||
#ifdef CONFIG_ALTIVEC
|
#ifdef CONFIG_ALTIVEC
|
||||||
[REGSET_VMX] = {
|
[REGSET_VMX] = {
|
||||||
.core_note_type = NT_PPC_VMX, .n = 34,
|
USER_REGSET_NOTE_TYPE(PPC_VMX), .n = 34,
|
||||||
.size = sizeof(vector128), .align = sizeof(vector128),
|
.size = sizeof(vector128), .align = sizeof(vector128),
|
||||||
.active = vr_active, .regset_get = vr_get, .set = vr_set
|
.active = vr_active, .regset_get = vr_get, .set = vr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_VSX
|
#ifdef CONFIG_VSX
|
||||||
[REGSET_VSX] = {
|
[REGSET_VSX] = {
|
||||||
.core_note_type = NT_PPC_VSX, .n = 32,
|
USER_REGSET_NOTE_TYPE(PPC_VSX), .n = 32,
|
||||||
.size = sizeof(double), .align = sizeof(double),
|
.size = sizeof(double), .align = sizeof(double),
|
||||||
.active = vsr_active, .regset_get = vsr_get, .set = vsr_set
|
.active = vsr_active, .regset_get = vsr_get, .set = vsr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SPE
|
#ifdef CONFIG_SPE
|
||||||
[REGSET_SPE] = {
|
[REGSET_SPE] = {
|
||||||
.core_note_type = NT_PPC_SPE, .n = 35,
|
USER_REGSET_NOTE_TYPE(PPC_SPE), .n = 35,
|
||||||
.size = sizeof(u32), .align = sizeof(u32),
|
.size = sizeof(u32), .align = sizeof(u32),
|
||||||
.active = evr_active, .regset_get = evr_get, .set = evr_set
|
.active = evr_active, .regset_get = evr_get, .set = evr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||||
[REGSET_TM_CGPR] = {
|
[REGSET_TM_CGPR] = {
|
||||||
.core_note_type = NT_PPC_TM_CGPR, .n = ELF_NGREG,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CGPR), .n = ELF_NGREG,
|
||||||
.size = sizeof(long), .align = sizeof(long),
|
.size = sizeof(long), .align = sizeof(long),
|
||||||
.active = tm_cgpr_active, .regset_get = tm_cgpr_get, .set = tm_cgpr_set
|
.active = tm_cgpr_active, .regset_get = tm_cgpr_get, .set = tm_cgpr_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CFPR] = {
|
[REGSET_TM_CFPR] = {
|
||||||
.core_note_type = NT_PPC_TM_CFPR, .n = ELF_NFPREG,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CFPR), .n = ELF_NFPREG,
|
||||||
.size = sizeof(double), .align = sizeof(double),
|
.size = sizeof(double), .align = sizeof(double),
|
||||||
.active = tm_cfpr_active, .regset_get = tm_cfpr_get, .set = tm_cfpr_set
|
.active = tm_cfpr_active, .regset_get = tm_cfpr_get, .set = tm_cfpr_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CVMX] = {
|
[REGSET_TM_CVMX] = {
|
||||||
.core_note_type = NT_PPC_TM_CVMX, .n = ELF_NVMX,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CVMX), .n = ELF_NVMX,
|
||||||
.size = sizeof(vector128), .align = sizeof(vector128),
|
.size = sizeof(vector128), .align = sizeof(vector128),
|
||||||
.active = tm_cvmx_active, .regset_get = tm_cvmx_get, .set = tm_cvmx_set
|
.active = tm_cvmx_active, .regset_get = tm_cvmx_get, .set = tm_cvmx_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CVSX] = {
|
[REGSET_TM_CVSX] = {
|
||||||
.core_note_type = NT_PPC_TM_CVSX, .n = ELF_NVSX,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CVSX), .n = ELF_NVSX,
|
||||||
.size = sizeof(double), .align = sizeof(double),
|
.size = sizeof(double), .align = sizeof(double),
|
||||||
.active = tm_cvsx_active, .regset_get = tm_cvsx_get, .set = tm_cvsx_set
|
.active = tm_cvsx_active, .regset_get = tm_cvsx_get, .set = tm_cvsx_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_SPR] = {
|
[REGSET_TM_SPR] = {
|
||||||
.core_note_type = NT_PPC_TM_SPR, .n = ELF_NTMSPRREG,
|
USER_REGSET_NOTE_TYPE(PPC_TM_SPR), .n = ELF_NTMSPRREG,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_spr_active, .regset_get = tm_spr_get, .set = tm_spr_set
|
.active = tm_spr_active, .regset_get = tm_spr_get, .set = tm_spr_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CTAR] = {
|
[REGSET_TM_CTAR] = {
|
||||||
.core_note_type = NT_PPC_TM_CTAR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CTAR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_tar_active, .regset_get = tm_tar_get, .set = tm_tar_set
|
.active = tm_tar_active, .regset_get = tm_tar_get, .set = tm_tar_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CPPR] = {
|
[REGSET_TM_CPPR] = {
|
||||||
.core_note_type = NT_PPC_TM_CPPR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CPPR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_ppr_active, .regset_get = tm_ppr_get, .set = tm_ppr_set
|
.active = tm_ppr_active, .regset_get = tm_ppr_get, .set = tm_ppr_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CDSCR] = {
|
[REGSET_TM_CDSCR] = {
|
||||||
.core_note_type = NT_PPC_TM_CDSCR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CDSCR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_dscr_active, .regset_get = tm_dscr_get, .set = tm_dscr_set
|
.active = tm_dscr_active, .regset_get = tm_dscr_get, .set = tm_dscr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
[REGSET_PPR] = {
|
[REGSET_PPR] = {
|
||||||
.core_note_type = NT_PPC_PPR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_PPR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = ppr_get, .set = ppr_set
|
.regset_get = ppr_get, .set = ppr_set
|
||||||
},
|
},
|
||||||
[REGSET_DSCR] = {
|
[REGSET_DSCR] = {
|
||||||
.core_note_type = NT_PPC_DSCR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_DSCR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = dscr_get, .set = dscr_set
|
.regset_get = dscr_get, .set = dscr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC_BOOK3S_64
|
#ifdef CONFIG_PPC_BOOK3S_64
|
||||||
[REGSET_TAR] = {
|
[REGSET_TAR] = {
|
||||||
.core_note_type = NT_PPC_TAR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TAR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = tar_get, .set = tar_set
|
.regset_get = tar_get, .set = tar_set
|
||||||
},
|
},
|
||||||
[REGSET_EBB] = {
|
[REGSET_EBB] = {
|
||||||
.core_note_type = NT_PPC_EBB, .n = ELF_NEBB,
|
USER_REGSET_NOTE_TYPE(PPC_EBB), .n = ELF_NEBB,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = ebb_active, .regset_get = ebb_get, .set = ebb_set
|
.active = ebb_active, .regset_get = ebb_get, .set = ebb_set
|
||||||
},
|
},
|
||||||
[REGSET_PMR] = {
|
[REGSET_PMR] = {
|
||||||
.core_note_type = NT_PPC_PMU, .n = ELF_NPMU,
|
USER_REGSET_NOTE_TYPE(PPC_PMU), .n = ELF_NPMU,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = pmu_active, .regset_get = pmu_get, .set = pmu_set
|
.active = pmu_active, .regset_get = pmu_get, .set = pmu_set
|
||||||
},
|
},
|
||||||
[REGSET_DEXCR] = {
|
[REGSET_DEXCR] = {
|
||||||
.core_note_type = NT_PPC_DEXCR, .n = ELF_NDEXCR,
|
USER_REGSET_NOTE_TYPE(PPC_DEXCR), .n = ELF_NDEXCR,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = dexcr_active, .regset_get = dexcr_get
|
.active = dexcr_active, .regset_get = dexcr_get
|
||||||
},
|
},
|
||||||
#ifdef CONFIG_CHECKPOINT_RESTORE
|
#ifdef CONFIG_CHECKPOINT_RESTORE
|
||||||
[REGSET_HASHKEYR] = {
|
[REGSET_HASHKEYR] = {
|
||||||
.core_note_type = NT_PPC_HASHKEYR, .n = ELF_NHASHKEYR,
|
USER_REGSET_NOTE_TYPE(PPC_HASHKEYR), .n = ELF_NHASHKEYR,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = hashkeyr_active, .regset_get = hashkeyr_get, .set = hashkeyr_set
|
.active = hashkeyr_active, .regset_get = hashkeyr_get, .set = hashkeyr_set
|
||||||
},
|
},
|
||||||
@ -683,7 +683,7 @@ static const struct user_regset native_regsets[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC_MEM_KEYS
|
#ifdef CONFIG_PPC_MEM_KEYS
|
||||||
[REGSET_PKEY] = {
|
[REGSET_PKEY] = {
|
||||||
.core_note_type = NT_PPC_PKEY, .n = ELF_NPKEY,
|
USER_REGSET_NOTE_TYPE(PPC_PKEY), .n = ELF_NPKEY,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = pkey_active, .regset_get = pkey_get, .set = pkey_set
|
.active = pkey_active, .regset_get = pkey_get, .set = pkey_set
|
||||||
},
|
},
|
||||||
@ -843,92 +843,92 @@ static int gpr32_set(struct task_struct *target,
|
|||||||
*/
|
*/
|
||||||
static const struct user_regset compat_regsets[] = {
|
static const struct user_regset compat_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS, .n = ELF_NGREG,
|
USER_REGSET_NOTE_TYPE(PRSTATUS), .n = ELF_NGREG,
|
||||||
.size = sizeof(compat_long_t), .align = sizeof(compat_long_t),
|
.size = sizeof(compat_long_t), .align = sizeof(compat_long_t),
|
||||||
.regset_get = gpr32_get, .set = gpr32_set
|
.regset_get = gpr32_get, .set = gpr32_set
|
||||||
},
|
},
|
||||||
[REGSET_FPR] = {
|
[REGSET_FPR] = {
|
||||||
.core_note_type = NT_PRFPREG, .n = ELF_NFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG,
|
||||||
.size = sizeof(double), .align = sizeof(double),
|
.size = sizeof(double), .align = sizeof(double),
|
||||||
.regset_get = fpr_get, .set = fpr_set
|
.regset_get = fpr_get, .set = fpr_set
|
||||||
},
|
},
|
||||||
#ifdef CONFIG_ALTIVEC
|
#ifdef CONFIG_ALTIVEC
|
||||||
[REGSET_VMX] = {
|
[REGSET_VMX] = {
|
||||||
.core_note_type = NT_PPC_VMX, .n = 34,
|
USER_REGSET_NOTE_TYPE(PPC_VMX), .n = 34,
|
||||||
.size = sizeof(vector128), .align = sizeof(vector128),
|
.size = sizeof(vector128), .align = sizeof(vector128),
|
||||||
.active = vr_active, .regset_get = vr_get, .set = vr_set
|
.active = vr_active, .regset_get = vr_get, .set = vr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SPE
|
#ifdef CONFIG_SPE
|
||||||
[REGSET_SPE] = {
|
[REGSET_SPE] = {
|
||||||
.core_note_type = NT_PPC_SPE, .n = 35,
|
USER_REGSET_NOTE_TYPE(PPC_SPE), .n = 35,
|
||||||
.size = sizeof(u32), .align = sizeof(u32),
|
.size = sizeof(u32), .align = sizeof(u32),
|
||||||
.active = evr_active, .regset_get = evr_get, .set = evr_set
|
.active = evr_active, .regset_get = evr_get, .set = evr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||||
[REGSET_TM_CGPR] = {
|
[REGSET_TM_CGPR] = {
|
||||||
.core_note_type = NT_PPC_TM_CGPR, .n = ELF_NGREG,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CGPR), .n = ELF_NGREG,
|
||||||
.size = sizeof(long), .align = sizeof(long),
|
.size = sizeof(long), .align = sizeof(long),
|
||||||
.active = tm_cgpr_active,
|
.active = tm_cgpr_active,
|
||||||
.regset_get = tm_cgpr32_get, .set = tm_cgpr32_set
|
.regset_get = tm_cgpr32_get, .set = tm_cgpr32_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CFPR] = {
|
[REGSET_TM_CFPR] = {
|
||||||
.core_note_type = NT_PPC_TM_CFPR, .n = ELF_NFPREG,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CFPR), .n = ELF_NFPREG,
|
||||||
.size = sizeof(double), .align = sizeof(double),
|
.size = sizeof(double), .align = sizeof(double),
|
||||||
.active = tm_cfpr_active, .regset_get = tm_cfpr_get, .set = tm_cfpr_set
|
.active = tm_cfpr_active, .regset_get = tm_cfpr_get, .set = tm_cfpr_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CVMX] = {
|
[REGSET_TM_CVMX] = {
|
||||||
.core_note_type = NT_PPC_TM_CVMX, .n = ELF_NVMX,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CVMX), .n = ELF_NVMX,
|
||||||
.size = sizeof(vector128), .align = sizeof(vector128),
|
.size = sizeof(vector128), .align = sizeof(vector128),
|
||||||
.active = tm_cvmx_active, .regset_get = tm_cvmx_get, .set = tm_cvmx_set
|
.active = tm_cvmx_active, .regset_get = tm_cvmx_get, .set = tm_cvmx_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CVSX] = {
|
[REGSET_TM_CVSX] = {
|
||||||
.core_note_type = NT_PPC_TM_CVSX, .n = ELF_NVSX,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CVSX), .n = ELF_NVSX,
|
||||||
.size = sizeof(double), .align = sizeof(double),
|
.size = sizeof(double), .align = sizeof(double),
|
||||||
.active = tm_cvsx_active, .regset_get = tm_cvsx_get, .set = tm_cvsx_set
|
.active = tm_cvsx_active, .regset_get = tm_cvsx_get, .set = tm_cvsx_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_SPR] = {
|
[REGSET_TM_SPR] = {
|
||||||
.core_note_type = NT_PPC_TM_SPR, .n = ELF_NTMSPRREG,
|
USER_REGSET_NOTE_TYPE(PPC_TM_SPR), .n = ELF_NTMSPRREG,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_spr_active, .regset_get = tm_spr_get, .set = tm_spr_set
|
.active = tm_spr_active, .regset_get = tm_spr_get, .set = tm_spr_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CTAR] = {
|
[REGSET_TM_CTAR] = {
|
||||||
.core_note_type = NT_PPC_TM_CTAR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CTAR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_tar_active, .regset_get = tm_tar_get, .set = tm_tar_set
|
.active = tm_tar_active, .regset_get = tm_tar_get, .set = tm_tar_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CPPR] = {
|
[REGSET_TM_CPPR] = {
|
||||||
.core_note_type = NT_PPC_TM_CPPR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CPPR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_ppr_active, .regset_get = tm_ppr_get, .set = tm_ppr_set
|
.active = tm_ppr_active, .regset_get = tm_ppr_get, .set = tm_ppr_set
|
||||||
},
|
},
|
||||||
[REGSET_TM_CDSCR] = {
|
[REGSET_TM_CDSCR] = {
|
||||||
.core_note_type = NT_PPC_TM_CDSCR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TM_CDSCR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = tm_dscr_active, .regset_get = tm_dscr_get, .set = tm_dscr_set
|
.active = tm_dscr_active, .regset_get = tm_dscr_get, .set = tm_dscr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
[REGSET_PPR] = {
|
[REGSET_PPR] = {
|
||||||
.core_note_type = NT_PPC_PPR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_PPR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = ppr_get, .set = ppr_set
|
.regset_get = ppr_get, .set = ppr_set
|
||||||
},
|
},
|
||||||
[REGSET_DSCR] = {
|
[REGSET_DSCR] = {
|
||||||
.core_note_type = NT_PPC_DSCR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_DSCR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = dscr_get, .set = dscr_set
|
.regset_get = dscr_get, .set = dscr_set
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC_BOOK3S_64
|
#ifdef CONFIG_PPC_BOOK3S_64
|
||||||
[REGSET_TAR] = {
|
[REGSET_TAR] = {
|
||||||
.core_note_type = NT_PPC_TAR, .n = 1,
|
USER_REGSET_NOTE_TYPE(PPC_TAR), .n = 1,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = tar_get, .set = tar_set
|
.regset_get = tar_get, .set = tar_set
|
||||||
},
|
},
|
||||||
[REGSET_EBB] = {
|
[REGSET_EBB] = {
|
||||||
.core_note_type = NT_PPC_EBB, .n = ELF_NEBB,
|
USER_REGSET_NOTE_TYPE(PPC_EBB), .n = ELF_NEBB,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.active = ebb_active, .regset_get = ebb_get, .set = ebb_set
|
.active = ebb_active, .regset_get = ebb_get, .set = ebb_set
|
||||||
},
|
},
|
||||||
|
@ -186,7 +186,7 @@ static int tagged_addr_ctrl_set(struct task_struct *target,
|
|||||||
|
|
||||||
static const struct user_regset riscv_user_regset[] = {
|
static const struct user_regset riscv_user_regset[] = {
|
||||||
[REGSET_X] = {
|
[REGSET_X] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(elf_greg_t),
|
.size = sizeof(elf_greg_t),
|
||||||
.align = sizeof(elf_greg_t),
|
.align = sizeof(elf_greg_t),
|
||||||
@ -195,7 +195,7 @@ static const struct user_regset riscv_user_regset[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_FPU
|
#ifdef CONFIG_FPU
|
||||||
[REGSET_F] = {
|
[REGSET_F] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = ELF_NFPREG,
|
.n = ELF_NFPREG,
|
||||||
.size = sizeof(elf_fpreg_t),
|
.size = sizeof(elf_fpreg_t),
|
||||||
.align = sizeof(elf_fpreg_t),
|
.align = sizeof(elf_fpreg_t),
|
||||||
@ -205,7 +205,7 @@ static const struct user_regset riscv_user_regset[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_RISCV_ISA_V
|
#ifdef CONFIG_RISCV_ISA_V
|
||||||
[REGSET_V] = {
|
[REGSET_V] = {
|
||||||
.core_note_type = NT_RISCV_VECTOR,
|
USER_REGSET_NOTE_TYPE(RISCV_VECTOR),
|
||||||
.align = 16,
|
.align = 16,
|
||||||
.n = ((32 * RISCV_MAX_VLENB) +
|
.n = ((32 * RISCV_MAX_VLENB) +
|
||||||
sizeof(struct __riscv_v_regset_state)) / sizeof(__u32),
|
sizeof(struct __riscv_v_regset_state)) / sizeof(__u32),
|
||||||
@ -216,7 +216,7 @@ static const struct user_regset riscv_user_regset[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_RISCV_ISA_SUPM
|
#ifdef CONFIG_RISCV_ISA_SUPM
|
||||||
[REGSET_TAGGED_ADDR_CTRL] = {
|
[REGSET_TAGGED_ADDR_CTRL] = {
|
||||||
.core_note_type = NT_RISCV_TAGGED_ADDR_CTRL,
|
USER_REGSET_NOTE_TYPE(RISCV_TAGGED_ADDR_CTRL),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -380,7 +380,7 @@ static int compat_riscv_gpr_set(struct task_struct *target,
|
|||||||
|
|
||||||
static const struct user_regset compat_riscv_user_regset[] = {
|
static const struct user_regset compat_riscv_user_regset[] = {
|
||||||
[REGSET_X] = {
|
[REGSET_X] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(compat_elf_greg_t),
|
.size = sizeof(compat_elf_greg_t),
|
||||||
.align = sizeof(compat_elf_greg_t),
|
.align = sizeof(compat_elf_greg_t),
|
||||||
@ -389,7 +389,7 @@ static const struct user_regset compat_riscv_user_regset[] = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_FPU
|
#ifdef CONFIG_FPU
|
||||||
[REGSET_F] = {
|
[REGSET_F] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = ELF_NFPREG,
|
.n = ELF_NFPREG,
|
||||||
.size = sizeof(elf_fpreg_t),
|
.size = sizeof(elf_fpreg_t),
|
||||||
.align = sizeof(elf_fpreg_t),
|
.align = sizeof(elf_fpreg_t),
|
||||||
|
@ -1209,7 +1209,7 @@ static int s390_runtime_instr_set(struct task_struct *target,
|
|||||||
|
|
||||||
static const struct user_regset s390_regsets[] = {
|
static const struct user_regset s390_regsets[] = {
|
||||||
{
|
{
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(s390_regs) / sizeof(long),
|
.n = sizeof(s390_regs) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1217,7 +1217,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_regs_set,
|
.set = s390_regs_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(s390_fp_regs) / sizeof(long),
|
.n = sizeof(s390_fp_regs) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1225,7 +1225,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_fpregs_set,
|
.set = s390_fpregs_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_SYSTEM_CALL,
|
USER_REGSET_NOTE_TYPE(S390_SYSTEM_CALL),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(unsigned int),
|
.size = sizeof(unsigned int),
|
||||||
.align = sizeof(unsigned int),
|
.align = sizeof(unsigned int),
|
||||||
@ -1233,7 +1233,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_system_call_set,
|
.set = s390_system_call_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_LAST_BREAK,
|
USER_REGSET_NOTE_TYPE(S390_LAST_BREAK),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1241,7 +1241,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_last_break_set,
|
.set = s390_last_break_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_TDB,
|
USER_REGSET_NOTE_TYPE(S390_TDB),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = 256,
|
.size = 256,
|
||||||
.align = 1,
|
.align = 1,
|
||||||
@ -1249,7 +1249,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_tdb_set,
|
.set = s390_tdb_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_VXRS_LOW,
|
USER_REGSET_NOTE_TYPE(S390_VXRS_LOW),
|
||||||
.n = __NUM_VXRS_LOW,
|
.n = __NUM_VXRS_LOW,
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
@ -1257,7 +1257,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_vxrs_low_set,
|
.set = s390_vxrs_low_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_VXRS_HIGH,
|
USER_REGSET_NOTE_TYPE(S390_VXRS_HIGH),
|
||||||
.n = __NUM_VXRS_HIGH,
|
.n = __NUM_VXRS_HIGH,
|
||||||
.size = sizeof(__vector128),
|
.size = sizeof(__vector128),
|
||||||
.align = sizeof(__vector128),
|
.align = sizeof(__vector128),
|
||||||
@ -1265,7 +1265,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_vxrs_high_set,
|
.set = s390_vxrs_high_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_GS_CB,
|
USER_REGSET_NOTE_TYPE(S390_GS_CB),
|
||||||
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
@ -1273,7 +1273,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_gs_cb_set,
|
.set = s390_gs_cb_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_GS_BC,
|
USER_REGSET_NOTE_TYPE(S390_GS_BC),
|
||||||
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
@ -1281,7 +1281,7 @@ static const struct user_regset s390_regsets[] = {
|
|||||||
.set = s390_gs_bc_set,
|
.set = s390_gs_bc_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_RI_CB,
|
USER_REGSET_NOTE_TYPE(S390_RI_CB),
|
||||||
.n = sizeof(struct runtime_instr_cb) / sizeof(__u64),
|
.n = sizeof(struct runtime_instr_cb) / sizeof(__u64),
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
@ -1413,7 +1413,7 @@ static int s390_compat_last_break_set(struct task_struct *target,
|
|||||||
|
|
||||||
static const struct user_regset s390_compat_regsets[] = {
|
static const struct user_regset s390_compat_regsets[] = {
|
||||||
{
|
{
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(s390_compat_regs) / sizeof(compat_long_t),
|
.n = sizeof(s390_compat_regs) / sizeof(compat_long_t),
|
||||||
.size = sizeof(compat_long_t),
|
.size = sizeof(compat_long_t),
|
||||||
.align = sizeof(compat_long_t),
|
.align = sizeof(compat_long_t),
|
||||||
@ -1421,7 +1421,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_compat_regs_set,
|
.set = s390_compat_regs_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(s390_fp_regs) / sizeof(compat_long_t),
|
.n = sizeof(s390_fp_regs) / sizeof(compat_long_t),
|
||||||
.size = sizeof(compat_long_t),
|
.size = sizeof(compat_long_t),
|
||||||
.align = sizeof(compat_long_t),
|
.align = sizeof(compat_long_t),
|
||||||
@ -1429,7 +1429,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_fpregs_set,
|
.set = s390_fpregs_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_SYSTEM_CALL,
|
USER_REGSET_NOTE_TYPE(S390_SYSTEM_CALL),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(compat_uint_t),
|
.size = sizeof(compat_uint_t),
|
||||||
.align = sizeof(compat_uint_t),
|
.align = sizeof(compat_uint_t),
|
||||||
@ -1437,7 +1437,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_system_call_set,
|
.set = s390_system_call_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_LAST_BREAK,
|
USER_REGSET_NOTE_TYPE(S390_LAST_BREAK),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1445,7 +1445,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_compat_last_break_set,
|
.set = s390_compat_last_break_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_TDB,
|
USER_REGSET_NOTE_TYPE(S390_TDB),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = 256,
|
.size = 256,
|
||||||
.align = 1,
|
.align = 1,
|
||||||
@ -1453,7 +1453,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_tdb_set,
|
.set = s390_tdb_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_VXRS_LOW,
|
USER_REGSET_NOTE_TYPE(S390_VXRS_LOW),
|
||||||
.n = __NUM_VXRS_LOW,
|
.n = __NUM_VXRS_LOW,
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
@ -1461,7 +1461,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_vxrs_low_set,
|
.set = s390_vxrs_low_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_VXRS_HIGH,
|
USER_REGSET_NOTE_TYPE(S390_VXRS_HIGH),
|
||||||
.n = __NUM_VXRS_HIGH,
|
.n = __NUM_VXRS_HIGH,
|
||||||
.size = sizeof(__vector128),
|
.size = sizeof(__vector128),
|
||||||
.align = sizeof(__vector128),
|
.align = sizeof(__vector128),
|
||||||
@ -1469,7 +1469,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_vxrs_high_set,
|
.set = s390_vxrs_high_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_HIGH_GPRS,
|
USER_REGSET_NOTE_TYPE(S390_HIGH_GPRS),
|
||||||
.n = sizeof(s390_compat_regs_high) / sizeof(compat_long_t),
|
.n = sizeof(s390_compat_regs_high) / sizeof(compat_long_t),
|
||||||
.size = sizeof(compat_long_t),
|
.size = sizeof(compat_long_t),
|
||||||
.align = sizeof(compat_long_t),
|
.align = sizeof(compat_long_t),
|
||||||
@ -1477,7 +1477,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_compat_regs_high_set,
|
.set = s390_compat_regs_high_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_GS_CB,
|
USER_REGSET_NOTE_TYPE(S390_GS_CB),
|
||||||
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
@ -1485,7 +1485,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_gs_cb_set,
|
.set = s390_gs_cb_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_GS_BC,
|
USER_REGSET_NOTE_TYPE(S390_GS_BC),
|
||||||
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
.n = sizeof(struct gs_cb) / sizeof(__u64),
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
@ -1493,7 +1493,7 @@ static const struct user_regset s390_compat_regsets[] = {
|
|||||||
.set = s390_gs_bc_set,
|
.set = s390_gs_bc_set,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.core_note_type = NT_S390_RI_CB,
|
USER_REGSET_NOTE_TYPE(S390_RI_CB),
|
||||||
.n = sizeof(struct runtime_instr_cb) / sizeof(__u64),
|
.n = sizeof(struct runtime_instr_cb) / sizeof(__u64),
|
||||||
.size = sizeof(__u64),
|
.size = sizeof(__u64),
|
||||||
.align = sizeof(__u64),
|
.align = sizeof(__u64),
|
||||||
|
@ -291,7 +291,7 @@ static const struct user_regset sh_regsets[] = {
|
|||||||
* PC, PR, SR, GBR, MACH, MACL, TRA
|
* PC, PR, SR, GBR, MACH, MACL, TRA
|
||||||
*/
|
*/
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = ELF_NGREG,
|
.n = ELF_NGREG,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -301,7 +301,7 @@ static const struct user_regset sh_regsets[] = {
|
|||||||
|
|
||||||
#ifdef CONFIG_SH_FPU
|
#ifdef CONFIG_SH_FPU
|
||||||
[REGSET_FPU] = {
|
[REGSET_FPU] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_fpu_struct) / sizeof(long),
|
.n = sizeof(struct user_fpu_struct) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
|
@ -218,7 +218,7 @@ static const struct user_regset sparc32_regsets[] = {
|
|||||||
* PSR, PC, nPC, Y, WIM, TBR
|
* PSR, PC, nPC, Y, WIM, TBR
|
||||||
*/
|
*/
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = 38,
|
.n = 38,
|
||||||
.size = sizeof(u32), .align = sizeof(u32),
|
.size = sizeof(u32), .align = sizeof(u32),
|
||||||
.regset_get = genregs32_get, .set = genregs32_set
|
.regset_get = genregs32_get, .set = genregs32_set
|
||||||
@ -234,7 +234,7 @@ static const struct user_regset sparc32_regsets[] = {
|
|||||||
* FPU QUEUE (64 32-bit ints)
|
* FPU QUEUE (64 32-bit ints)
|
||||||
*/
|
*/
|
||||||
[REGSET_FP] = {
|
[REGSET_FP] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = 99,
|
.n = 99,
|
||||||
.size = sizeof(u32), .align = sizeof(u32),
|
.size = sizeof(u32), .align = sizeof(u32),
|
||||||
.regset_get = fpregs32_get, .set = fpregs32_set
|
.regset_get = fpregs32_get, .set = fpregs32_set
|
||||||
|
@ -420,7 +420,7 @@ static const struct user_regset sparc64_regsets[] = {
|
|||||||
* TSTATE, TPC, TNPC, Y
|
* TSTATE, TPC, TNPC, Y
|
||||||
*/
|
*/
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = 36,
|
.n = 36,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = genregs64_get, .set = genregs64_set
|
.regset_get = genregs64_get, .set = genregs64_set
|
||||||
@ -432,7 +432,7 @@ static const struct user_regset sparc64_regsets[] = {
|
|||||||
* FPRS
|
* FPRS
|
||||||
*/
|
*/
|
||||||
[REGSET_FP] = {
|
[REGSET_FP] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = 35,
|
.n = 35,
|
||||||
.size = sizeof(u64), .align = sizeof(u64),
|
.size = sizeof(u64), .align = sizeof(u64),
|
||||||
.regset_get = fpregs64_get, .set = fpregs64_set
|
.regset_get = fpregs64_get, .set = fpregs64_set
|
||||||
@ -750,7 +750,7 @@ static const struct user_regset sparc32_regsets[] = {
|
|||||||
* PSR, PC, nPC, Y, WIM, TBR
|
* PSR, PC, nPC, Y, WIM, TBR
|
||||||
*/
|
*/
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = 38,
|
.n = 38,
|
||||||
.size = sizeof(u32), .align = sizeof(u32),
|
.size = sizeof(u32), .align = sizeof(u32),
|
||||||
.regset_get = genregs32_get, .set = genregs32_set
|
.regset_get = genregs32_get, .set = genregs32_set
|
||||||
@ -766,7 +766,7 @@ static const struct user_regset sparc32_regsets[] = {
|
|||||||
* FPU QUEUE (64 32-bit ints)
|
* FPU QUEUE (64 32-bit ints)
|
||||||
*/
|
*/
|
||||||
[REGSET_FP] = {
|
[REGSET_FP] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = 99,
|
.n = 99,
|
||||||
.size = sizeof(u32), .align = sizeof(u32),
|
.size = sizeof(u32), .align = sizeof(u32),
|
||||||
.regset_get = fpregs32_get, .set = fpregs32_set
|
.regset_get = fpregs32_get, .set = fpregs32_set
|
||||||
|
@ -1236,7 +1236,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
|||||||
|
|
||||||
static struct user_regset x86_64_regsets[] __ro_after_init = {
|
static struct user_regset x86_64_regsets[] __ro_after_init = {
|
||||||
[REGSET64_GENERAL] = {
|
[REGSET64_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(struct user_regs_struct) / sizeof(long),
|
.n = sizeof(struct user_regs_struct) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1244,7 +1244,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = {
|
|||||||
.set = genregs_set
|
.set = genregs_set
|
||||||
},
|
},
|
||||||
[REGSET64_FP] = {
|
[REGSET64_FP] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct fxregs_state) / sizeof(long),
|
.n = sizeof(struct fxregs_state) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1253,7 +1253,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = {
|
|||||||
.set = xfpregs_set
|
.set = xfpregs_set
|
||||||
},
|
},
|
||||||
[REGSET64_XSTATE] = {
|
[REGSET64_XSTATE] = {
|
||||||
.core_note_type = NT_X86_XSTATE,
|
USER_REGSET_NOTE_TYPE(X86_XSTATE),
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
.active = xstateregs_active,
|
.active = xstateregs_active,
|
||||||
@ -1261,7 +1261,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = {
|
|||||||
.set = xstateregs_set
|
.set = xstateregs_set
|
||||||
},
|
},
|
||||||
[REGSET64_IOPERM] = {
|
[REGSET64_IOPERM] = {
|
||||||
.core_note_type = NT_386_IOPERM,
|
USER_REGSET_NOTE_TYPE(386_IOPERM),
|
||||||
.n = IO_BITMAP_LONGS,
|
.n = IO_BITMAP_LONGS,
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -1270,7 +1270,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = {
|
|||||||
},
|
},
|
||||||
#ifdef CONFIG_X86_USER_SHADOW_STACK
|
#ifdef CONFIG_X86_USER_SHADOW_STACK
|
||||||
[REGSET64_SSP] = {
|
[REGSET64_SSP] = {
|
||||||
.core_note_type = NT_X86_SHSTK,
|
USER_REGSET_NOTE_TYPE(X86_SHSTK),
|
||||||
.n = 1,
|
.n = 1,
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
@ -1297,7 +1297,7 @@ static const struct user_regset_view user_x86_64_view = {
|
|||||||
#if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
|
#if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
|
||||||
static struct user_regset x86_32_regsets[] __ro_after_init = {
|
static struct user_regset x86_32_regsets[] __ro_after_init = {
|
||||||
[REGSET32_GENERAL] = {
|
[REGSET32_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(struct user_regs_struct32) / sizeof(u32),
|
.n = sizeof(struct user_regs_struct32) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -1305,7 +1305,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = {
|
|||||||
.set = genregs32_set
|
.set = genregs32_set
|
||||||
},
|
},
|
||||||
[REGSET32_FP] = {
|
[REGSET32_FP] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_i387_ia32_struct) / sizeof(u32),
|
.n = sizeof(struct user_i387_ia32_struct) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -1314,7 +1314,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = {
|
|||||||
.set = fpregs_set
|
.set = fpregs_set
|
||||||
},
|
},
|
||||||
[REGSET32_XFP] = {
|
[REGSET32_XFP] = {
|
||||||
.core_note_type = NT_PRXFPREG,
|
USER_REGSET_NOTE_TYPE(PRXFPREG),
|
||||||
.n = sizeof(struct fxregs_state) / sizeof(u32),
|
.n = sizeof(struct fxregs_state) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -1323,7 +1323,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = {
|
|||||||
.set = xfpregs_set
|
.set = xfpregs_set
|
||||||
},
|
},
|
||||||
[REGSET32_XSTATE] = {
|
[REGSET32_XSTATE] = {
|
||||||
.core_note_type = NT_X86_XSTATE,
|
USER_REGSET_NOTE_TYPE(X86_XSTATE),
|
||||||
.size = sizeof(u64),
|
.size = sizeof(u64),
|
||||||
.align = sizeof(u64),
|
.align = sizeof(u64),
|
||||||
.active = xstateregs_active,
|
.active = xstateregs_active,
|
||||||
@ -1331,7 +1331,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = {
|
|||||||
.set = xstateregs_set
|
.set = xstateregs_set
|
||||||
},
|
},
|
||||||
[REGSET32_TLS] = {
|
[REGSET32_TLS] = {
|
||||||
.core_note_type = NT_386_TLS,
|
USER_REGSET_NOTE_TYPE(386_TLS),
|
||||||
.n = GDT_ENTRY_TLS_ENTRIES,
|
.n = GDT_ENTRY_TLS_ENTRIES,
|
||||||
.bias = GDT_ENTRY_TLS_MIN,
|
.bias = GDT_ENTRY_TLS_MIN,
|
||||||
.size = sizeof(struct user_desc),
|
.size = sizeof(struct user_desc),
|
||||||
@ -1341,7 +1341,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = {
|
|||||||
.set = regset_tls_set
|
.set = regset_tls_set
|
||||||
},
|
},
|
||||||
[REGSET32_IOPERM] = {
|
[REGSET32_IOPERM] = {
|
||||||
.core_note_type = NT_386_IOPERM,
|
USER_REGSET_NOTE_TYPE(386_IOPERM),
|
||||||
.n = IO_BITMAP_BYTES / sizeof(u32),
|
.n = IO_BITMAP_BYTES / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
|
@ -236,7 +236,7 @@ static int generic_fpregs_set(struct task_struct *target,
|
|||||||
|
|
||||||
static struct user_regset uml_regsets[] __ro_after_init = {
|
static struct user_regset uml_regsets[] __ro_after_init = {
|
||||||
[REGSET_GENERAL] = {
|
[REGSET_GENERAL] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(struct user_regs_struct) / sizeof(long),
|
.n = sizeof(struct user_regs_struct) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -246,7 +246,7 @@ static struct user_regset uml_regsets[] __ro_after_init = {
|
|||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
/* Old FP registers, they are needed in signal frames */
|
/* Old FP registers, they are needed in signal frames */
|
||||||
[REGSET_FP_LEGACY] = {
|
[REGSET_FP_LEGACY] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_i387_ia32_struct) / sizeof(long),
|
.n = sizeof(struct user_i387_ia32_struct) / sizeof(long),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
@ -257,10 +257,10 @@ static struct user_regset uml_regsets[] __ro_after_init = {
|
|||||||
#endif
|
#endif
|
||||||
[REGSET_FP] = {
|
[REGSET_FP] = {
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
.core_note_type = NT_PRXFPREG,
|
USER_REGSET_NOTE_TYPE(PRXFPREG),
|
||||||
.n = sizeof(struct user32_fxsr_struct) / sizeof(long),
|
.n = sizeof(struct user32_fxsr_struct) / sizeof(long),
|
||||||
#else
|
#else
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(struct user_i387_struct) / sizeof(long),
|
.n = sizeof(struct user_i387_struct) / sizeof(long),
|
||||||
#endif
|
#endif
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
@ -270,7 +270,7 @@ static struct user_regset uml_regsets[] __ro_after_init = {
|
|||||||
.set = generic_fpregs_set,
|
.set = generic_fpregs_set,
|
||||||
},
|
},
|
||||||
[REGSET_XSTATE] = {
|
[REGSET_XSTATE] = {
|
||||||
.core_note_type = NT_X86_XSTATE,
|
USER_REGSET_NOTE_TYPE(X86_XSTATE),
|
||||||
.size = sizeof(long),
|
.size = sizeof(long),
|
||||||
.align = sizeof(long),
|
.align = sizeof(long),
|
||||||
.active = generic_fpregs_active,
|
.active = generic_fpregs_active,
|
||||||
|
@ -193,7 +193,7 @@ enum xtensa_regset {
|
|||||||
|
|
||||||
static const struct user_regset xtensa_regsets[] = {
|
static const struct user_regset xtensa_regsets[] = {
|
||||||
[REGSET_GPR] = {
|
[REGSET_GPR] = {
|
||||||
.core_note_type = NT_PRSTATUS,
|
USER_REGSET_NOTE_TYPE(PRSTATUS),
|
||||||
.n = sizeof(struct user_pt_regs) / sizeof(u32),
|
.n = sizeof(struct user_pt_regs) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
@ -201,7 +201,7 @@ static const struct user_regset xtensa_regsets[] = {
|
|||||||
.set = gpr_set,
|
.set = gpr_set,
|
||||||
},
|
},
|
||||||
[REGSET_TIE] = {
|
[REGSET_TIE] = {
|
||||||
.core_note_type = NT_PRFPREG,
|
USER_REGSET_NOTE_TYPE(PRFPREG),
|
||||||
.n = sizeof(elf_xtregs_t) / sizeof(u32),
|
.n = sizeof(elf_xtregs_t) / sizeof(u32),
|
||||||
.size = sizeof(u32),
|
.size = sizeof(u32),
|
||||||
.align = sizeof(u32),
|
.align = sizeof(u32),
|
||||||
|
@ -519,7 +519,7 @@ static struct elf_phdr *load_elf_phdrs(const struct elfhdr *elf_ex,
|
|||||||
/* Sanity check the number of program headers... */
|
/* Sanity check the number of program headers... */
|
||||||
/* ...and their total size. */
|
/* ...and their total size. */
|
||||||
size = sizeof(struct elf_phdr) * elf_ex->e_phnum;
|
size = sizeof(struct elf_phdr) * elf_ex->e_phnum;
|
||||||
if (size == 0 || size > 65536 || size > ELF_MIN_ALIGN)
|
if (size == 0 || size > 65536)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
elf_phdata = kmalloc(size, GFP_KERNEL);
|
elf_phdata = kmalloc(size, GFP_KERNEL);
|
||||||
@ -1450,8 +1450,8 @@ static void fill_elf_note_phdr(struct elf_phdr *phdr, int sz, loff_t offset)
|
|||||||
phdr->p_align = 4;
|
phdr->p_align = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_note(struct memelfnote *note, const char *name, int type,
|
static void __fill_note(struct memelfnote *note, const char *name, int type,
|
||||||
unsigned int sz, void *data)
|
unsigned int sz, void *data)
|
||||||
{
|
{
|
||||||
note->name = name;
|
note->name = name;
|
||||||
note->type = type;
|
note->type = type;
|
||||||
@ -1459,6 +1459,9 @@ static void fill_note(struct memelfnote *note, const char *name, int type,
|
|||||||
note->data = data;
|
note->data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define fill_note(note, type, sz, data) \
|
||||||
|
__fill_note(note, NN_ ## type, NT_ ## type, sz, data)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fill up all the fields in prstatus from the given task struct, except
|
* fill up all the fields in prstatus from the given task struct, except
|
||||||
* registers which need to be filled up separately.
|
* registers which need to be filled up separately.
|
||||||
@ -1549,14 +1552,14 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
|
|||||||
do
|
do
|
||||||
i += 2;
|
i += 2;
|
||||||
while (auxv[i - 2] != AT_NULL);
|
while (auxv[i - 2] != AT_NULL);
|
||||||
fill_note(note, NN_AUXV, NT_AUXV, i * sizeof(elf_addr_t), auxv);
|
fill_note(note, AUXV, i * sizeof(elf_addr_t), auxv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
|
static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
|
||||||
const kernel_siginfo_t *siginfo)
|
const kernel_siginfo_t *siginfo)
|
||||||
{
|
{
|
||||||
copy_siginfo_to_external(csigdata, siginfo);
|
copy_siginfo_to_external(csigdata, siginfo);
|
||||||
fill_note(note, NN_SIGINFO, NT_SIGINFO, sizeof(*csigdata), csigdata);
|
fill_note(note, SIGINFO, sizeof(*csigdata), csigdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1652,7 +1655,7 @@ static int fill_files_note(struct memelfnote *note, struct coredump_params *cprm
|
|||||||
}
|
}
|
||||||
|
|
||||||
size = name_curpos - (char *)data;
|
size = name_curpos - (char *)data;
|
||||||
fill_note(note, NN_FILE, NT_FILE, size, data);
|
fill_note(note, FILE, size, data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1713,8 +1716,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
|
|||||||
regset_get(t->task, &view->regsets[0],
|
regset_get(t->task, &view->regsets[0],
|
||||||
sizeof(t->prstatus.pr_reg), &t->prstatus.pr_reg);
|
sizeof(t->prstatus.pr_reg), &t->prstatus.pr_reg);
|
||||||
|
|
||||||
fill_note(&t->notes[0], NN_PRSTATUS, NT_PRSTATUS,
|
fill_note(&t->notes[0], PRSTATUS, PRSTATUS_SIZE, &t->prstatus);
|
||||||
PRSTATUS_SIZE, &t->prstatus);
|
|
||||||
info->size += notesize(&t->notes[0]);
|
info->size += notesize(&t->notes[0]);
|
||||||
|
|
||||||
do_thread_regset_writeback(t->task, &view->regsets[0]);
|
do_thread_regset_writeback(t->task, &view->regsets[0]);
|
||||||
@ -1727,6 +1729,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
|
|||||||
for (view_iter = 1; view_iter < view->n; ++view_iter) {
|
for (view_iter = 1; view_iter < view->n; ++view_iter) {
|
||||||
const struct user_regset *regset = &view->regsets[view_iter];
|
const struct user_regset *regset = &view->regsets[view_iter];
|
||||||
int note_type = regset->core_note_type;
|
int note_type = regset->core_note_type;
|
||||||
|
const char *note_name = regset->core_note_name;
|
||||||
bool is_fpreg = note_type == NT_PRFPREG;
|
bool is_fpreg = note_type == NT_PRFPREG;
|
||||||
void *data;
|
void *data;
|
||||||
int ret;
|
int ret;
|
||||||
@ -1747,8 +1750,16 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
|
|||||||
if (is_fpreg)
|
if (is_fpreg)
|
||||||
SET_PR_FPVALID(&t->prstatus);
|
SET_PR_FPVALID(&t->prstatus);
|
||||||
|
|
||||||
fill_note(&t->notes[note_iter], is_fpreg ? NN_PRFPREG : "LINUX",
|
/* There should be a note name, but if not, guess: */
|
||||||
note_type, ret, data);
|
if (WARN_ON_ONCE(!note_name))
|
||||||
|
note_name = "LINUX";
|
||||||
|
else
|
||||||
|
/* Warn on non-legacy-compatible names, for now. */
|
||||||
|
WARN_ON_ONCE(strcmp(note_name,
|
||||||
|
is_fpreg ? "CORE" : "LINUX"));
|
||||||
|
|
||||||
|
__fill_note(&t->notes[note_iter], note_name, note_type,
|
||||||
|
ret, data);
|
||||||
|
|
||||||
info->size += notesize(&t->notes[note_iter]);
|
info->size += notesize(&t->notes[note_iter]);
|
||||||
note_iter++;
|
note_iter++;
|
||||||
@ -1767,8 +1778,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
|
|||||||
fill_prstatus(&t->prstatus.common, p, signr);
|
fill_prstatus(&t->prstatus.common, p, signr);
|
||||||
elf_core_copy_task_regs(p, &t->prstatus.pr_reg);
|
elf_core_copy_task_regs(p, &t->prstatus.pr_reg);
|
||||||
|
|
||||||
fill_note(&t->notes[0], NN_PRSTATUS, NT_PRSTATUS, sizeof(t->prstatus),
|
fill_note(&t->notes[0], PRSTATUS, sizeof(t->prstatus), &t->prstatus);
|
||||||
&(t->prstatus));
|
|
||||||
info->size += notesize(&t->notes[0]);
|
info->size += notesize(&t->notes[0]);
|
||||||
|
|
||||||
fpu = kzalloc(sizeof(elf_fpregset_t), GFP_KERNEL);
|
fpu = kzalloc(sizeof(elf_fpregset_t), GFP_KERNEL);
|
||||||
@ -1778,7 +1788,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
|
|||||||
}
|
}
|
||||||
|
|
||||||
t->prstatus.pr_fpvalid = 1;
|
t->prstatus.pr_fpvalid = 1;
|
||||||
fill_note(&t->notes[1], NN_PRFPREG, NT_PRFPREG, sizeof(*fpu), fpu);
|
fill_note(&t->notes[1], PRFPREG, sizeof(*fpu), fpu);
|
||||||
info->size += notesize(&t->notes[1]);
|
info->size += notesize(&t->notes[1]);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -1798,7 +1808,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
|
|||||||
psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL);
|
psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL);
|
||||||
if (!psinfo)
|
if (!psinfo)
|
||||||
return 0;
|
return 0;
|
||||||
fill_note(&info->psinfo, NN_PRPSINFO, NT_PRPSINFO, sizeof(*psinfo), psinfo);
|
fill_note(&info->psinfo, PRPSINFO, sizeof(*psinfo), psinfo);
|
||||||
|
|
||||||
#ifdef CORE_DUMP_USE_REGSET
|
#ifdef CORE_DUMP_USE_REGSET
|
||||||
view = task_user_regset_view(dump_task);
|
view = task_user_regset_view(dump_task);
|
||||||
|
@ -1275,8 +1275,8 @@ static inline void fill_elf_note_phdr(struct elf_phdr *phdr, int sz, loff_t offs
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void fill_note(struct memelfnote *note, const char *name, int type,
|
static inline void __fill_note(struct memelfnote *note, const char *name, int type,
|
||||||
unsigned int sz, void *data)
|
unsigned int sz, void *data)
|
||||||
{
|
{
|
||||||
note->name = name;
|
note->name = name;
|
||||||
note->type = type;
|
note->type = type;
|
||||||
@ -1285,6 +1285,9 @@ static inline void fill_note(struct memelfnote *note, const char *name, int type
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define fill_note(note, type, sz, data) \
|
||||||
|
__fill_note(note, NN_ ## type, NT_ ## type, sz, data)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fill up all the fields in prstatus from the given task struct, except
|
* fill up all the fields in prstatus from the given task struct, except
|
||||||
* registers which need to be filled up separately.
|
* registers which need to be filled up separately.
|
||||||
@ -1398,8 +1401,7 @@ static struct elf_thread_status *elf_dump_thread_status(long signr, struct task_
|
|||||||
regset_get(p, &view->regsets[0],
|
regset_get(p, &view->regsets[0],
|
||||||
sizeof(t->prstatus.pr_reg), &t->prstatus.pr_reg);
|
sizeof(t->prstatus.pr_reg), &t->prstatus.pr_reg);
|
||||||
|
|
||||||
fill_note(&t->notes[0], NN_PRSTATUS, NT_PRSTATUS, sizeof(t->prstatus),
|
fill_note(&t->notes[0], PRSTATUS, sizeof(t->prstatus), &t->prstatus);
|
||||||
&t->prstatus);
|
|
||||||
t->num_notes++;
|
t->num_notes++;
|
||||||
*sz += notesize(&t->notes[0]);
|
*sz += notesize(&t->notes[0]);
|
||||||
|
|
||||||
@ -1416,8 +1418,7 @@ static struct elf_thread_status *elf_dump_thread_status(long signr, struct task_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (t->prstatus.pr_fpvalid) {
|
if (t->prstatus.pr_fpvalid) {
|
||||||
fill_note(&t->notes[1], NN_PRFPREG, NT_PRFPREG, sizeof(t->fpu),
|
fill_note(&t->notes[1], PRFPREG, sizeof(t->fpu), &t->fpu);
|
||||||
&t->fpu);
|
|
||||||
t->num_notes++;
|
t->num_notes++;
|
||||||
*sz += notesize(&t->notes[1]);
|
*sz += notesize(&t->notes[1]);
|
||||||
}
|
}
|
||||||
@ -1531,7 +1532,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
fill_psinfo(psinfo, current->group_leader, current->mm);
|
fill_psinfo(psinfo, current->group_leader, current->mm);
|
||||||
fill_note(&psinfo_note, NN_PRPSINFO, NT_PRPSINFO, sizeof(*psinfo), psinfo);
|
fill_note(&psinfo_note, PRPSINFO, sizeof(*psinfo), psinfo);
|
||||||
thread_status_size += notesize(&psinfo_note);
|
thread_status_size += notesize(&psinfo_note);
|
||||||
|
|
||||||
auxv = (elf_addr_t *) current->mm->saved_auxv;
|
auxv = (elf_addr_t *) current->mm->saved_auxv;
|
||||||
@ -1539,7 +1540,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
|
|||||||
do
|
do
|
||||||
i += 2;
|
i += 2;
|
||||||
while (auxv[i - 2] != AT_NULL);
|
while (auxv[i - 2] != AT_NULL);
|
||||||
fill_note(&auxv_note, NN_AUXV, NT_AUXV, i * sizeof(elf_addr_t), auxv);
|
fill_note(&auxv_note, AUXV, i * sizeof(elf_addr_t), auxv);
|
||||||
thread_status_size += notesize(&auxv_note);
|
thread_status_size += notesize(&auxv_note);
|
||||||
|
|
||||||
offset = sizeof(*elf); /* ELF header */
|
offset = sizeof(*elf); /* ELF header */
|
||||||
|
@ -151,7 +151,8 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
|
|||||||
* @align: Required alignment, in bytes.
|
* @align: Required alignment, in bytes.
|
||||||
* @bias: Bias from natural indexing.
|
* @bias: Bias from natural indexing.
|
||||||
* @core_note_type: ELF note @n_type value used in core dumps.
|
* @core_note_type: ELF note @n_type value used in core dumps.
|
||||||
* @get: Function to fetch values.
|
* @core_note_name: ELF note name to qualify the note type.
|
||||||
|
* @regset_get: Function to fetch values.
|
||||||
* @set: Function to store values.
|
* @set: Function to store values.
|
||||||
* @active: Function to report if regset is active, or %NULL.
|
* @active: Function to report if regset is active, or %NULL.
|
||||||
* @writeback: Function to write data back to user memory, or %NULL.
|
* @writeback: Function to write data back to user memory, or %NULL.
|
||||||
@ -190,6 +191,10 @@ typedef int user_regset_writeback_fn(struct task_struct *target,
|
|||||||
*
|
*
|
||||||
* If nonzero, @core_note_type gives the n_type field (NT_* value)
|
* If nonzero, @core_note_type gives the n_type field (NT_* value)
|
||||||
* of the core file note in which this regset's data appears.
|
* of the core file note in which this regset's data appears.
|
||||||
|
* @core_note_name specifies the note name. The preferred way to
|
||||||
|
* specify these two fields is to use the @USER_REGSET_NOTE_TYPE()
|
||||||
|
* macro.
|
||||||
|
*
|
||||||
* NT_PRSTATUS is a special case in that the regset data starts at
|
* NT_PRSTATUS is a special case in that the regset data starts at
|
||||||
* offsetof(struct elf_prstatus, pr_reg) into the note data; that is
|
* offsetof(struct elf_prstatus, pr_reg) into the note data; that is
|
||||||
* part of the per-machine ELF formats userland knows about. In
|
* part of the per-machine ELF formats userland knows about. In
|
||||||
@ -207,8 +212,13 @@ struct user_regset {
|
|||||||
unsigned int align;
|
unsigned int align;
|
||||||
unsigned int bias;
|
unsigned int bias;
|
||||||
unsigned int core_note_type;
|
unsigned int core_note_type;
|
||||||
|
const char *core_note_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define USER_REGSET_NOTE_TYPE(type) \
|
||||||
|
.core_note_type = (NT_ ## type), \
|
||||||
|
.core_note_name = (NN_ ## type)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct user_regset_view - available regsets
|
* struct user_regset_view - available regsets
|
||||||
* @name: Identifier, e.g. UTS_MACHINE string.
|
* @name: Identifier, e.g. UTS_MACHINE string.
|
||||||
|
@ -2743,7 +2743,7 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
noinline static int copy_clone_args_from_user(struct kernel_clone_args *kargs,
|
static noinline int copy_clone_args_from_user(struct kernel_clone_args *kargs,
|
||||||
struct clone_args __user *uargs,
|
struct clone_args __user *uargs,
|
||||||
size_t usize)
|
size_t usize)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user