mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02: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
					
				
					 24 changed files with 196 additions and 175 deletions
				
			
		|  | @ -284,7 +284,7 @@ enum arc_getset { | |||
| 
 | ||||
| static const struct user_regset arc_regsets[] = { | ||||
| 	[REGSET_CMN] = { | ||||
| 	       .core_note_type = NT_PRSTATUS, | ||||
| 	       USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 	       .n = ELF_NGREG, | ||||
| 	       .size = sizeof(unsigned long), | ||||
| 	       .align = sizeof(unsigned long), | ||||
|  | @ -293,7 +293,7 @@ static const struct user_regset arc_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_ISA_ARCV2 | ||||
| 	[REGSET_ARCV2] = { | ||||
| 	       .core_note_type = NT_ARC_V2, | ||||
| 	       USER_REGSET_NOTE_TYPE(ARC_V2), | ||||
| 	       .n = ELF_ARCV2REG, | ||||
| 	       .size = sizeof(unsigned long), | ||||
| 	       .align = sizeof(unsigned long), | ||||
|  |  | |||
|  | @ -677,7 +677,7 @@ enum arm_regset { | |||
| 
 | ||||
| static const struct user_regset arm_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = ELF_NGREG, | ||||
| 		.size = 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 | ||||
| 		 * 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), | ||||
| 		.size = 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 | ||||
| 		 * 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), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  |  | |||
|  | @ -1586,7 +1586,7 @@ enum aarch64_regset { | |||
| 
 | ||||
| static const struct user_regset aarch64_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = sizeof(struct user_pt_regs) / sizeof(u64), | ||||
| 		.size = sizeof(u64), | ||||
| 		.align = sizeof(u64), | ||||
|  | @ -1594,7 +1594,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 		.set = gpr_set | ||||
| 	}, | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = sizeof(struct user_fpsimd_state) / sizeof(u32), | ||||
| 		/*
 | ||||
| 		 * 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 | ||||
| 	}, | ||||
| 	[REGSET_TLS] = { | ||||
| 		.core_note_type = NT_ARM_TLS, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_TLS), | ||||
| 		.n = 2, | ||||
| 		.size = sizeof(void *), | ||||
| 		.align = sizeof(void *), | ||||
|  | @ -1616,7 +1616,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||||
| 	[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), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  | @ -1624,7 +1624,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 		.set = hw_break_set, | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  | @ -1633,7 +1633,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 	}, | ||||
| #endif | ||||
| 	[REGSET_SYSTEM_CALL] = { | ||||
| 		.core_note_type = NT_ARM_SYSTEM_CALL, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_SYSTEM_CALL), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(int), | ||||
| 		.align = sizeof(int), | ||||
|  | @ -1641,7 +1641,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 		.set = system_call_set, | ||||
| 	}, | ||||
| 	[REGSET_FPMR] = { | ||||
| 		.core_note_type = NT_ARM_FPMR, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_FPMR), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(u64), | ||||
| 		.align = sizeof(u64), | ||||
|  | @ -1650,7 +1650,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_ARM64_SVE | ||||
| 	[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, | ||||
| 					      SVE_PT_REGS_SVE), | ||||
| 				  SVE_VQ_BYTES), | ||||
|  | @ -1662,7 +1662,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_ARM64_SME | ||||
| 	[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), | ||||
| 				  SVE_VQ_BYTES), | ||||
| 		.size = SVE_VQ_BYTES, | ||||
|  | @ -1671,7 +1671,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 		.set = ssve_set, | ||||
| 	}, | ||||
| 	[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 | ||||
| 		 * the ptrace core requires that the size of any data | ||||
|  | @ -1687,7 +1687,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 		.set = za_set, | ||||
| 	}, | ||||
| 	[REGSET_ZT] = { /* SME ZT */ | ||||
| 		.core_note_type = NT_ARM_ZT, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_ZT), | ||||
| 		.n = 1, | ||||
| 		.size = ZT_SIG_REG_BYTES, | ||||
| 		.align = sizeof(u64), | ||||
|  | @ -1697,7 +1697,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_ARM64_PTR_AUTH | ||||
| 	[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), | ||||
| 		.size = sizeof(u64), | ||||
| 		.align = sizeof(u64), | ||||
|  | @ -1705,7 +1705,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 		/* this cannot be set dynamically */ | ||||
| 	}, | ||||
| 	[REGSET_PAC_ENABLED_KEYS] = { | ||||
| 		.core_note_type = NT_ARM_PAC_ENABLED_KEYS, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_PAC_ENABLED_KEYS), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(long), | ||||
| 		.align = sizeof(long), | ||||
|  | @ -1714,7 +1714,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_CHECKPOINT_RESTORE | ||||
| 	[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), | ||||
| 		.size = sizeof(__uint128_t), | ||||
| 		.align = sizeof(__uint128_t), | ||||
|  | @ -1722,7 +1722,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| 		.set = pac_address_keys_set, | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.size = sizeof(__uint128_t), | ||||
| 		.align = sizeof(__uint128_t), | ||||
|  | @ -1733,7 +1733,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_ARM64_TAGGED_ADDR_ABI | ||||
| 	[REGSET_TAGGED_ADDR_CTRL] = { | ||||
| 		.core_note_type = NT_ARM_TAGGED_ADDR_CTRL, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_TAGGED_ADDR_CTRL), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(long), | ||||
| 		.align = sizeof(long), | ||||
|  | @ -1743,7 +1743,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_ARM64_POE | ||||
| 	[REGSET_POE] = { | ||||
| 		.core_note_type = NT_ARM_POE, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_POE), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(long), | ||||
| 		.align = sizeof(long), | ||||
|  | @ -1753,7 +1753,7 @@ static const struct user_regset aarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_ARM64_GCS | ||||
| 	[REGSET_GCS] = { | ||||
| 		.core_note_type = NT_ARM_GCS, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_GCS), | ||||
| 		.n = sizeof(struct user_gcs) / sizeof(u64), | ||||
| 		.size = 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[] = { | ||||
| 	[REGSET_COMPAT_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = COMPAT_ELF_NGREG, | ||||
| 		.size = 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 | ||||
| 	}, | ||||
| 	[REGSET_COMPAT_VFP] = { | ||||
| 		.core_note_type = NT_ARM_VFP, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_VFP), | ||||
| 		.n = VFP_STATE_SIZE / sizeof(compat_ulong_t), | ||||
| 		.size = 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[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = COMPAT_ELF_NGREG, | ||||
| 		.size = 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 | ||||
| 	}, | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type = NT_ARM_VFP, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_VFP), | ||||
| 		.n = VFP_STATE_SIZE / sizeof(compat_ulong_t), | ||||
| 		.size = 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 | ||||
| 	}, | ||||
| 	[REGSET_TLS] = { | ||||
| 		.core_note_type = NT_ARM_TLS, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_TLS), | ||||
| 		.n = 1, | ||||
| 		.size = 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 | ||||
| 	[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), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  | @ -2001,7 +2001,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = { | |||
| 		.set = hw_break_set, | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  | @ -2010,7 +2010,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = { | |||
| 	}, | ||||
| #endif | ||||
| 	[REGSET_SYSTEM_CALL] = { | ||||
| 		.core_note_type = NT_ARM_SYSTEM_CALL, | ||||
| 		USER_REGSET_NOTE_TYPE(ARM_SYSTEM_CALL), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(int), | ||||
| 		.align = sizeof(int), | ||||
|  |  | |||
|  | @ -166,7 +166,7 @@ static int fpr_set(struct task_struct *target, | |||
| 
 | ||||
| static const struct user_regset csky_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = sizeof(struct pt_regs) / sizeof(u32), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  | @ -174,7 +174,7 @@ static const struct user_regset csky_regsets[] = { | |||
| 		.set = gpr_set, | ||||
| 	}, | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = sizeof(struct user_fp) / sizeof(u32), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  |  | |||
|  | @ -137,7 +137,7 @@ enum hexagon_regset { | |||
| 
 | ||||
| static const struct user_regset hexagon_regsets[] = { | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = ELF_NGREG, | ||||
| 		.size = sizeof(unsigned long), | ||||
| 		.align = sizeof(unsigned long), | ||||
|  |  | |||
|  | @ -864,7 +864,7 @@ enum loongarch_regset { | |||
| 
 | ||||
| static const struct user_regset loongarch64_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type	= NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n		= ELF_NGREG, | ||||
| 		.size		= sizeof(elf_greg_t), | ||||
| 		.align		= sizeof(elf_greg_t), | ||||
|  | @ -872,7 +872,7 @@ static const struct user_regset loongarch64_regsets[] = { | |||
| 		.set		= gpr_set, | ||||
| 	}, | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= ELF_NFPREG, | ||||
| 		.size		= sizeof(elf_fpreg_t), | ||||
| 		.align		= sizeof(elf_fpreg_t), | ||||
|  | @ -880,7 +880,7 @@ static const struct user_regset loongarch64_regsets[] = { | |||
| 		.set		= fpr_set, | ||||
| 	}, | ||||
| 	[REGSET_CPUCFG] = { | ||||
| 		.core_note_type	= NT_LOONGARCH_CPUCFG, | ||||
| 		USER_REGSET_NOTE_TYPE(LOONGARCH_CPUCFG), | ||||
| 		.n		= 64, | ||||
| 		.size		= sizeof(u32), | ||||
| 		.align		= sizeof(u32), | ||||
|  | @ -889,7 +889,7 @@ static const struct user_regset loongarch64_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_CPU_HAS_LSX | ||||
| 	[REGSET_LSX] = { | ||||
| 		.core_note_type	= NT_LOONGARCH_LSX, | ||||
| 		USER_REGSET_NOTE_TYPE(LOONGARCH_LSX), | ||||
| 		.n		= NUM_FPU_REGS, | ||||
| 		.size		= 16, | ||||
| 		.align		= 16, | ||||
|  | @ -899,7 +899,7 @@ static const struct user_regset loongarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_CPU_HAS_LASX | ||||
| 	[REGSET_LASX] = { | ||||
| 		.core_note_type	= NT_LOONGARCH_LASX, | ||||
| 		USER_REGSET_NOTE_TYPE(LOONGARCH_LASX), | ||||
| 		.n		= NUM_FPU_REGS, | ||||
| 		.size		= 32, | ||||
| 		.align		= 32, | ||||
|  | @ -909,7 +909,7 @@ static const struct user_regset loongarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_CPU_HAS_LBT | ||||
| 	[REGSET_LBT] = { | ||||
| 		.core_note_type	= NT_LOONGARCH_LBT, | ||||
| 		USER_REGSET_NOTE_TYPE(LOONGARCH_LBT), | ||||
| 		.n		= 5, | ||||
| 		.size		= sizeof(u64), | ||||
| 		.align		= sizeof(u64), | ||||
|  | @ -919,7 +919,7 @@ static const struct user_regset loongarch64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||||
| 	[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), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  | @ -927,7 +927,7 @@ static const struct user_regset loongarch64_regsets[] = { | |||
| 		.set = hw_break_set, | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  |  | |||
|  | @ -319,7 +319,7 @@ enum m68k_regset { | |||
| 
 | ||||
| static const struct user_regset m68k_user_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = ELF_NGREG, | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u16), | ||||
|  | @ -327,7 +327,7 @@ static const struct user_regset m68k_user_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_FPU | ||||
| 	[REGSET_FPU] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = sizeof(struct user_m68kfp_struct) / sizeof(u32), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  |  | |||
|  | @ -935,7 +935,7 @@ int regs_query_register_offset(const char *name) | |||
| 
 | ||||
| static const struct user_regset mips_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type	= NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n		= ELF_NGREG, | ||||
| 		.size		= sizeof(unsigned int), | ||||
| 		.align		= sizeof(unsigned int), | ||||
|  | @ -943,7 +943,7 @@ static const struct user_regset mips_regsets[] = { | |||
| 		.set		= gpr32_set, | ||||
| 	}, | ||||
| 	[REGSET_DSP] = { | ||||
| 		.core_note_type	= NT_MIPS_DSP, | ||||
| 		USER_REGSET_NOTE_TYPE(MIPS_DSP), | ||||
| 		.n		= NUM_DSP_REGS + 1, | ||||
| 		.size		= sizeof(u32), | ||||
| 		.align		= sizeof(u32), | ||||
|  | @ -953,7 +953,7 @@ static const struct user_regset mips_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_MIPS_FP_SUPPORT | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= ELF_NFPREG, | ||||
| 		.size		= sizeof(elf_fpreg_t), | ||||
| 		.align		= sizeof(elf_fpreg_t), | ||||
|  | @ -961,7 +961,7 @@ static const struct user_regset mips_regsets[] = { | |||
| 		.set		= fpr_set, | ||||
| 	}, | ||||
| 	[REGSET_FP_MODE] = { | ||||
| 		.core_note_type	= NT_MIPS_FP_MODE, | ||||
| 		USER_REGSET_NOTE_TYPE(MIPS_FP_MODE), | ||||
| 		.n		= 1, | ||||
| 		.size		= sizeof(int), | ||||
| 		.align		= sizeof(int), | ||||
|  | @ -971,7 +971,7 @@ static const struct user_regset mips_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_CPU_HAS_MSA | ||||
| 	[REGSET_MSA] = { | ||||
| 		.core_note_type	= NT_MIPS_MSA, | ||||
| 		USER_REGSET_NOTE_TYPE(MIPS_MSA), | ||||
| 		.n		= NUM_FPU_REGS + 1, | ||||
| 		.size		= 16, | ||||
| 		.align		= 16, | ||||
|  | @ -995,7 +995,7 @@ static const struct user_regset_view user_mips_view = { | |||
| 
 | ||||
| static const struct user_regset mips64_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type	= NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n		= ELF_NGREG, | ||||
| 		.size		= sizeof(unsigned long), | ||||
| 		.align		= sizeof(unsigned long), | ||||
|  | @ -1003,7 +1003,7 @@ static const struct user_regset mips64_regsets[] = { | |||
| 		.set		= gpr64_set, | ||||
| 	}, | ||||
| 	[REGSET_DSP] = { | ||||
| 		.core_note_type	= NT_MIPS_DSP, | ||||
| 		USER_REGSET_NOTE_TYPE(MIPS_DSP), | ||||
| 		.n		= NUM_DSP_REGS + 1, | ||||
| 		.size		= sizeof(u64), | ||||
| 		.align		= sizeof(u64), | ||||
|  | @ -1013,7 +1013,7 @@ static const struct user_regset mips64_regsets[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_MIPS_FP_SUPPORT | ||||
| 	[REGSET_FP_MODE] = { | ||||
| 		.core_note_type	= NT_MIPS_FP_MODE, | ||||
| 		USER_REGSET_NOTE_TYPE(MIPS_FP_MODE), | ||||
| 		.n		= 1, | ||||
| 		.size		= sizeof(int), | ||||
| 		.align		= sizeof(int), | ||||
|  | @ -1021,7 +1021,7 @@ static const struct user_regset mips64_regsets[] = { | |||
| 		.set		= fp_mode_set, | ||||
| 	}, | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= ELF_NFPREG, | ||||
| 		.size		= sizeof(elf_fpreg_t), | ||||
| 		.align		= sizeof(elf_fpreg_t), | ||||
|  | @ -1031,7 +1031,7 @@ static const struct user_regset mips64_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_CPU_HAS_MSA | ||||
| 	[REGSET_MSA] = { | ||||
| 		.core_note_type	= NT_MIPS_MSA, | ||||
| 		USER_REGSET_NOTE_TYPE(MIPS_MSA), | ||||
| 		.n		= NUM_FPU_REGS + 1, | ||||
| 		.size		= 16, | ||||
| 		.align		= 16, | ||||
|  |  | |||
|  | @ -95,7 +95,7 @@ enum nios2_regset { | |||
| 
 | ||||
| static const struct user_regset nios2_regsets[] = { | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = NUM_PTRACE_REG, | ||||
| 		.size = sizeof(unsigned long), | ||||
| 		.align = sizeof(unsigned long), | ||||
|  |  | |||
|  | @ -124,7 +124,7 @@ enum or1k_regset { | |||
| 
 | ||||
| static const struct user_regset or1k_regsets[] = { | ||||
| 	[REGSET_GENERAL] = { | ||||
| 			    .core_note_type = NT_PRSTATUS, | ||||
| 			    USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 			    .n = ELF_NGREG, | ||||
| 			    .size = sizeof(long), | ||||
| 			    .align = sizeof(long), | ||||
|  | @ -133,7 +133,7 @@ static const struct user_regset or1k_regsets[] = { | |||
| 			    }, | ||||
| #ifdef CONFIG_FPU | ||||
| 	[REGSET_FPU] = { | ||||
| 			    .core_note_type = NT_PRFPREG, | ||||
| 			    USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 			    .n = sizeof(struct __or1k_fpu_state) / sizeof(long), | ||||
| 			    .size = sizeof(long), | ||||
| 			    .align = sizeof(long), | ||||
|  |  | |||
|  | @ -562,12 +562,12 @@ static int gpr_set(struct task_struct *target, | |||
| 
 | ||||
| static const struct user_regset native_regsets[] = { | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type = NT_PRSTATUS, .n = ELF_NGREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), .n = ELF_NGREG, | ||||
| 		.size = sizeof(long), .align = sizeof(long), | ||||
| 		.regset_get = gpr_get, .set = gpr_set | ||||
| 	}, | ||||
| 	[REGSET_FP] = { | ||||
| 		.core_note_type = NT_PRFPREG, .n = ELF_NFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG, | ||||
| 		.size = sizeof(__u64), .align = sizeof(__u64), | ||||
| 		.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[] = { | ||||
| 	[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), | ||||
| 		.regset_get = gpr32_get, .set = gpr32_set | ||||
| 	}, | ||||
| 	[REGSET_FP] = { | ||||
| 		.core_note_type = NT_PRFPREG, .n = ELF_NFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG, | ||||
| 		.size = sizeof(__u64), .align = sizeof(__u64), | ||||
| 		.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[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, .n = ELF_NGREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), .n = ELF_NGREG, | ||||
| 		.size = sizeof(long), .align = sizeof(long), | ||||
| 		.regset_get = gpr_get, .set = gpr_set | ||||
| 	}, | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type = NT_PRFPREG, .n = ELF_NFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG, | ||||
| 		.size = sizeof(double), .align = sizeof(double), | ||||
| 		.regset_get = fpr_get, .set = fpr_set | ||||
| 	}, | ||||
| #ifdef CONFIG_ALTIVEC | ||||
| 	[REGSET_VMX] = { | ||||
| 		.core_note_type = NT_PPC_VMX, .n = 34, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_VMX), .n = 34, | ||||
| 		.size = sizeof(vector128), .align = sizeof(vector128), | ||||
| 		.active = vr_active, .regset_get = vr_get, .set = vr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_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), | ||||
| 		.active = vsr_active, .regset_get = vsr_get, .set = vsr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_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), | ||||
| 		.active = evr_active, .regset_get = evr_get, .set = evr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||||
| 	[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), | ||||
| 		.active = tm_cgpr_active, .regset_get = tm_cgpr_get, .set = tm_cgpr_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_cfpr_active, .regset_get = tm_cfpr_get, .set = tm_cfpr_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_cvmx_active, .regset_get = tm_cvmx_get, .set = tm_cvmx_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_cvsx_active, .regset_get = tm_cvsx_get, .set = tm_cvsx_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_spr_active, .regset_get = tm_spr_get, .set = tm_spr_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_tar_active, .regset_get = tm_tar_get, .set = tm_tar_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_ppr_active, .regset_get = tm_ppr_get, .set = tm_ppr_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_dscr_active, .regset_get = tm_dscr_get, .set = tm_dscr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_PPC64 | ||||
| 	[REGSET_PPR] = { | ||||
| 		.core_note_type = NT_PPC_PPR, .n = 1, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_PPR), .n = 1, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = ppr_get, .set = ppr_set | ||||
| 	}, | ||||
| 	[REGSET_DSCR] = { | ||||
| 		.core_note_type = NT_PPC_DSCR, .n = 1, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_DSCR), .n = 1, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = dscr_get, .set = dscr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_PPC_BOOK3S_64 | ||||
| 	[REGSET_TAR] = { | ||||
| 		.core_note_type = NT_PPC_TAR, .n = 1, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_TAR), .n = 1, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = tar_get, .set = tar_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = ebb_active, .regset_get = ebb_get, .set = ebb_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = pmu_active, .regset_get = pmu_get, .set = pmu_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = dexcr_active, .regset_get = dexcr_get | ||||
| 	}, | ||||
| #ifdef CONFIG_CHECKPOINT_RESTORE | ||||
| 	[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), | ||||
| 		.active = hashkeyr_active, .regset_get = hashkeyr_get, .set = hashkeyr_set | ||||
| 	}, | ||||
|  | @ -683,7 +683,7 @@ static const struct user_regset native_regsets[] = { | |||
| #endif | ||||
| #ifdef CONFIG_PPC_MEM_KEYS | ||||
| 	[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), | ||||
| 		.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[] = { | ||||
| 	[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), | ||||
| 		.regset_get = gpr32_get, .set = gpr32_set | ||||
| 	}, | ||||
| 	[REGSET_FPR] = { | ||||
| 		.core_note_type = NT_PRFPREG, .n = ELF_NFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), .n = ELF_NFPREG, | ||||
| 		.size = sizeof(double), .align = sizeof(double), | ||||
| 		.regset_get = fpr_get, .set = fpr_set | ||||
| 	}, | ||||
| #ifdef CONFIG_ALTIVEC | ||||
| 	[REGSET_VMX] = { | ||||
| 		.core_note_type = NT_PPC_VMX, .n = 34, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_VMX), .n = 34, | ||||
| 		.size = sizeof(vector128), .align = sizeof(vector128), | ||||
| 		.active = vr_active, .regset_get = vr_get, .set = vr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_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), | ||||
| 		.active = evr_active, .regset_get = evr_get, .set = evr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||||
| 	[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), | ||||
| 		.active = tm_cgpr_active, | ||||
| 		.regset_get = tm_cgpr32_get, .set = tm_cgpr32_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_cfpr_active, .regset_get = tm_cfpr_get, .set = tm_cfpr_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_cvmx_active, .regset_get = tm_cvmx_get, .set = tm_cvmx_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_cvsx_active, .regset_get = tm_cvsx_get, .set = tm_cvsx_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_spr_active, .regset_get = tm_spr_get, .set = tm_spr_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_tar_active, .regset_get = tm_tar_get, .set = tm_tar_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_ppr_active, .regset_get = tm_ppr_get, .set = tm_ppr_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.active = tm_dscr_active, .regset_get = tm_dscr_get, .set = tm_dscr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_PPC64 | ||||
| 	[REGSET_PPR] = { | ||||
| 		.core_note_type = NT_PPC_PPR, .n = 1, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_PPR), .n = 1, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = ppr_get, .set = ppr_set | ||||
| 	}, | ||||
| 	[REGSET_DSCR] = { | ||||
| 		.core_note_type = NT_PPC_DSCR, .n = 1, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_DSCR), .n = 1, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = dscr_get, .set = dscr_set | ||||
| 	}, | ||||
| #endif | ||||
| #ifdef CONFIG_PPC_BOOK3S_64 | ||||
| 	[REGSET_TAR] = { | ||||
| 		.core_note_type = NT_PPC_TAR, .n = 1, | ||||
| 		USER_REGSET_NOTE_TYPE(PPC_TAR), .n = 1, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = tar_get, .set = tar_set | ||||
| 	}, | ||||
| 	[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), | ||||
| 		.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[] = { | ||||
| 	[REGSET_X] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = ELF_NGREG, | ||||
| 		.size = sizeof(elf_greg_t), | ||||
| 		.align = sizeof(elf_greg_t), | ||||
|  | @ -195,7 +195,7 @@ static const struct user_regset riscv_user_regset[] = { | |||
| 	}, | ||||
| #ifdef CONFIG_FPU | ||||
| 	[REGSET_F] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = ELF_NFPREG, | ||||
| 		.size = sizeof(elf_fpreg_t), | ||||
| 		.align = sizeof(elf_fpreg_t), | ||||
|  | @ -205,7 +205,7 @@ static const struct user_regset riscv_user_regset[] = { | |||
| #endif | ||||
| #ifdef CONFIG_RISCV_ISA_V | ||||
| 	[REGSET_V] = { | ||||
| 		.core_note_type = NT_RISCV_VECTOR, | ||||
| 		USER_REGSET_NOTE_TYPE(RISCV_VECTOR), | ||||
| 		.align = 16, | ||||
| 		.n = ((32 * RISCV_MAX_VLENB) + | ||||
| 		      sizeof(struct __riscv_v_regset_state)) / sizeof(__u32), | ||||
|  | @ -216,7 +216,7 @@ static const struct user_regset riscv_user_regset[] = { | |||
| #endif | ||||
| #ifdef CONFIG_RISCV_ISA_SUPM | ||||
| 	[REGSET_TAGGED_ADDR_CTRL] = { | ||||
| 		.core_note_type = NT_RISCV_TAGGED_ADDR_CTRL, | ||||
| 		USER_REGSET_NOTE_TYPE(RISCV_TAGGED_ADDR_CTRL), | ||||
| 		.n = 1, | ||||
| 		.size = 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[] = { | ||||
| 	[REGSET_X] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = ELF_NGREG, | ||||
| 		.size = 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 | ||||
| 	[REGSET_F] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = ELF_NFPREG, | ||||
| 		.size = 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[] = { | ||||
| 	{ | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = sizeof(s390_regs) / sizeof(long), | ||||
| 		.size = sizeof(long), | ||||
| 		.align = sizeof(long), | ||||
|  | @ -1217,7 +1217,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.set = s390_regs_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = sizeof(s390_fp_regs) / sizeof(long), | ||||
| 		.size = sizeof(long), | ||||
| 		.align = sizeof(long), | ||||
|  | @ -1225,7 +1225,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.set = s390_fpregs_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_SYSTEM_CALL, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_SYSTEM_CALL), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(unsigned int), | ||||
| 		.align = sizeof(unsigned int), | ||||
|  | @ -1233,7 +1233,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.set = s390_system_call_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_LAST_BREAK, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_LAST_BREAK), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(long), | ||||
| 		.align = sizeof(long), | ||||
|  | @ -1241,7 +1241,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.set = s390_last_break_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_TDB, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_TDB), | ||||
| 		.n = 1, | ||||
| 		.size = 256, | ||||
| 		.align = 1, | ||||
|  | @ -1249,7 +1249,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.set = s390_tdb_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_VXRS_LOW, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_VXRS_LOW), | ||||
| 		.n = __NUM_VXRS_LOW, | ||||
| 		.size = sizeof(__u64), | ||||
| 		.align = sizeof(__u64), | ||||
|  | @ -1257,7 +1257,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.set = s390_vxrs_low_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_VXRS_HIGH, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_VXRS_HIGH), | ||||
| 		.n = __NUM_VXRS_HIGH, | ||||
| 		.size = sizeof(__vector128), | ||||
| 		.align = sizeof(__vector128), | ||||
|  | @ -1265,7 +1265,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.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), | ||||
| 		.size = sizeof(__u64), | ||||
| 		.align = sizeof(__u64), | ||||
|  | @ -1273,7 +1273,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.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), | ||||
| 		.size = sizeof(__u64), | ||||
| 		.align = sizeof(__u64), | ||||
|  | @ -1281,7 +1281,7 @@ static const struct user_regset s390_regsets[] = { | |||
| 		.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), | ||||
| 		.size = 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[] = { | ||||
| 	{ | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = sizeof(s390_compat_regs) / sizeof(compat_long_t), | ||||
| 		.size = 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, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = sizeof(s390_fp_regs) / sizeof(compat_long_t), | ||||
| 		.size = 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, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_SYSTEM_CALL, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_SYSTEM_CALL), | ||||
| 		.n = 1, | ||||
| 		.size = 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, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_LAST_BREAK, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_LAST_BREAK), | ||||
| 		.n = 1, | ||||
| 		.size = sizeof(long), | ||||
| 		.align = sizeof(long), | ||||
|  | @ -1445,7 +1445,7 @@ static const struct user_regset s390_compat_regsets[] = { | |||
| 		.set = s390_compat_last_break_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_TDB, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_TDB), | ||||
| 		.n = 1, | ||||
| 		.size = 256, | ||||
| 		.align = 1, | ||||
|  | @ -1453,7 +1453,7 @@ static const struct user_regset s390_compat_regsets[] = { | |||
| 		.set = s390_tdb_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_VXRS_LOW, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_VXRS_LOW), | ||||
| 		.n = __NUM_VXRS_LOW, | ||||
| 		.size = sizeof(__u64), | ||||
| 		.align = sizeof(__u64), | ||||
|  | @ -1461,7 +1461,7 @@ static const struct user_regset s390_compat_regsets[] = { | |||
| 		.set = s390_vxrs_low_set, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_VXRS_HIGH, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_VXRS_HIGH), | ||||
| 		.n = __NUM_VXRS_HIGH, | ||||
| 		.size = sizeof(__vector128), | ||||
| 		.align = sizeof(__vector128), | ||||
|  | @ -1469,7 +1469,7 @@ static const struct user_regset s390_compat_regsets[] = { | |||
| 		.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), | ||||
| 		.size = 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, | ||||
| 	}, | ||||
| 	{ | ||||
| 		.core_note_type = NT_S390_GS_CB, | ||||
| 		USER_REGSET_NOTE_TYPE(S390_GS_CB), | ||||
| 		.n = sizeof(struct gs_cb) / sizeof(__u64), | ||||
| 		.size = sizeof(__u64), | ||||
| 		.align = sizeof(__u64), | ||||
|  | @ -1485,7 +1485,7 @@ static const struct user_regset s390_compat_regsets[] = { | |||
| 		.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), | ||||
| 		.size = sizeof(__u64), | ||||
| 		.align = sizeof(__u64), | ||||
|  | @ -1493,7 +1493,7 @@ static const struct user_regset s390_compat_regsets[] = { | |||
| 		.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), | ||||
| 		.size = sizeof(__u64), | ||||
| 		.align = sizeof(__u64), | ||||
|  |  | |||
|  | @ -291,7 +291,7 @@ static const struct user_regset sh_regsets[] = { | |||
| 	 *	PC, PR, SR, GBR, MACH, MACL, TRA | ||||
| 	 */ | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type	= NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n		= ELF_NGREG, | ||||
| 		.size		= sizeof(long), | ||||
| 		.align		= sizeof(long), | ||||
|  | @ -301,7 +301,7 @@ static const struct user_regset sh_regsets[] = { | |||
| 
 | ||||
| #ifdef CONFIG_SH_FPU | ||||
| 	[REGSET_FPU] = { | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= sizeof(struct user_fpu_struct) / sizeof(long), | ||||
| 		.size		= sizeof(long), | ||||
| 		.align		= sizeof(long), | ||||
|  |  | |||
|  | @ -218,7 +218,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
| 	 *	PSR, PC, nPC, Y, WIM, TBR | ||||
| 	 */ | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = 38, | ||||
| 		.size = sizeof(u32), .align = sizeof(u32), | ||||
| 		.regset_get = genregs32_get, .set = genregs32_set | ||||
|  | @ -234,7 +234,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
| 	 *	FPU QUEUE (64 32-bit ints) | ||||
| 	 */ | ||||
| 	[REGSET_FP] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = 99, | ||||
| 		.size = sizeof(u32), .align = sizeof(u32), | ||||
| 		.regset_get = fpregs32_get, .set = fpregs32_set | ||||
|  |  | |||
|  | @ -420,7 +420,7 @@ static const struct user_regset sparc64_regsets[] = { | |||
| 	 *	TSTATE, TPC, TNPC, Y | ||||
| 	 */ | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = 36, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = genregs64_get, .set = genregs64_set | ||||
|  | @ -432,7 +432,7 @@ static const struct user_regset sparc64_regsets[] = { | |||
| 	 *	FPRS | ||||
| 	 */ | ||||
| 	[REGSET_FP] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = 35, | ||||
| 		.size = sizeof(u64), .align = sizeof(u64), | ||||
| 		.regset_get = fpregs64_get, .set = fpregs64_set | ||||
|  | @ -750,7 +750,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
| 	 *	PSR, PC, nPC, Y, WIM, TBR | ||||
| 	 */ | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = 38, | ||||
| 		.size = sizeof(u32), .align = sizeof(u32), | ||||
| 		.regset_get = genregs32_get, .set = genregs32_set | ||||
|  | @ -766,7 +766,7 @@ static const struct user_regset sparc32_regsets[] = { | |||
| 	 *	FPU QUEUE (64 32-bit ints) | ||||
| 	 */ | ||||
| 	[REGSET_FP] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = 99, | ||||
| 		.size = sizeof(u32), .align = sizeof(u32), | ||||
| 		.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 = { | ||||
| 	[REGSET64_GENERAL] = { | ||||
| 		.core_note_type	= NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n		= sizeof(struct user_regs_struct) / sizeof(long), | ||||
| 		.size		= sizeof(long), | ||||
| 		.align		= sizeof(long), | ||||
|  | @ -1244,7 +1244,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = { | |||
| 		.set		= genregs_set | ||||
| 	}, | ||||
| 	[REGSET64_FP] = { | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= sizeof(struct fxregs_state) / sizeof(long), | ||||
| 		.size		= sizeof(long), | ||||
| 		.align		= sizeof(long), | ||||
|  | @ -1253,7 +1253,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = { | |||
| 		.set		= xfpregs_set | ||||
| 	}, | ||||
| 	[REGSET64_XSTATE] = { | ||||
| 		.core_note_type	= NT_X86_XSTATE, | ||||
| 		USER_REGSET_NOTE_TYPE(X86_XSTATE), | ||||
| 		.size		= sizeof(u64), | ||||
| 		.align		= sizeof(u64), | ||||
| 		.active		= xstateregs_active, | ||||
|  | @ -1261,7 +1261,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = { | |||
| 		.set		= xstateregs_set | ||||
| 	}, | ||||
| 	[REGSET64_IOPERM] = { | ||||
| 		.core_note_type	= NT_386_IOPERM, | ||||
| 		USER_REGSET_NOTE_TYPE(386_IOPERM), | ||||
| 		.n		= IO_BITMAP_LONGS, | ||||
| 		.size		= 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 | ||||
| 	[REGSET64_SSP] = { | ||||
| 		.core_note_type	= NT_X86_SHSTK, | ||||
| 		USER_REGSET_NOTE_TYPE(X86_SHSTK), | ||||
| 		.n		= 1, | ||||
| 		.size		= 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 | ||||
| static struct user_regset x86_32_regsets[] __ro_after_init = { | ||||
| 	[REGSET32_GENERAL] = { | ||||
| 		.core_note_type	= NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n		= sizeof(struct user_regs_struct32) / sizeof(u32), | ||||
| 		.size		= sizeof(u32), | ||||
| 		.align		= sizeof(u32), | ||||
|  | @ -1305,7 +1305,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = { | |||
| 		.set		= genregs32_set | ||||
| 	}, | ||||
| 	[REGSET32_FP] = { | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= sizeof(struct user_i387_ia32_struct) / sizeof(u32), | ||||
| 		.size		= sizeof(u32), | ||||
| 		.align		= sizeof(u32), | ||||
|  | @ -1314,7 +1314,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = { | |||
| 		.set		= fpregs_set | ||||
| 	}, | ||||
| 	[REGSET32_XFP] = { | ||||
| 		.core_note_type	= NT_PRXFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRXFPREG), | ||||
| 		.n		= sizeof(struct fxregs_state) / sizeof(u32), | ||||
| 		.size		= sizeof(u32), | ||||
| 		.align		= sizeof(u32), | ||||
|  | @ -1323,7 +1323,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = { | |||
| 		.set		= xfpregs_set | ||||
| 	}, | ||||
| 	[REGSET32_XSTATE] = { | ||||
| 		.core_note_type	= NT_X86_XSTATE, | ||||
| 		USER_REGSET_NOTE_TYPE(X86_XSTATE), | ||||
| 		.size		= sizeof(u64), | ||||
| 		.align		= sizeof(u64), | ||||
| 		.active		= xstateregs_active, | ||||
|  | @ -1331,7 +1331,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = { | |||
| 		.set		= xstateregs_set | ||||
| 	}, | ||||
| 	[REGSET32_TLS] = { | ||||
| 		.core_note_type	= NT_386_TLS, | ||||
| 		USER_REGSET_NOTE_TYPE(386_TLS), | ||||
| 		.n		= GDT_ENTRY_TLS_ENTRIES, | ||||
| 		.bias		= GDT_ENTRY_TLS_MIN, | ||||
| 		.size		= sizeof(struct user_desc), | ||||
|  | @ -1341,7 +1341,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = { | |||
| 		.set		= regset_tls_set | ||||
| 	}, | ||||
| 	[REGSET32_IOPERM] = { | ||||
| 		.core_note_type	= NT_386_IOPERM, | ||||
| 		USER_REGSET_NOTE_TYPE(386_IOPERM), | ||||
| 		.n		= IO_BITMAP_BYTES / sizeof(u32), | ||||
| 		.size		= 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 = { | ||||
| 	[REGSET_GENERAL] = { | ||||
| 		.core_note_type	= NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n		= sizeof(struct user_regs_struct) / sizeof(long), | ||||
| 		.size		= sizeof(long), | ||||
| 		.align		= sizeof(long), | ||||
|  | @ -246,7 +246,7 @@ static struct user_regset uml_regsets[] __ro_after_init = { | |||
| #ifdef CONFIG_X86_32 | ||||
| 	/* Old FP registers, they are needed in signal frames */ | ||||
| 	[REGSET_FP_LEGACY] = { | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= sizeof(struct user_i387_ia32_struct) / sizeof(long), | ||||
| 		.size		= sizeof(long), | ||||
| 		.align		= sizeof(long), | ||||
|  | @ -257,10 +257,10 @@ static struct user_regset uml_regsets[] __ro_after_init = { | |||
| #endif | ||||
| 	[REGSET_FP] = { | ||||
| #ifdef CONFIG_X86_32 | ||||
| 		.core_note_type	= NT_PRXFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRXFPREG), | ||||
| 		.n		= sizeof(struct user32_fxsr_struct) / sizeof(long), | ||||
| #else | ||||
| 		.core_note_type	= NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n		= sizeof(struct user_i387_struct) / sizeof(long), | ||||
| #endif | ||||
| 		.size		= sizeof(long), | ||||
|  | @ -270,7 +270,7 @@ static struct user_regset uml_regsets[] __ro_after_init = { | |||
| 		.set		= generic_fpregs_set, | ||||
| 	}, | ||||
| 	[REGSET_XSTATE] = { | ||||
| 		.core_note_type	= NT_X86_XSTATE, | ||||
| 		USER_REGSET_NOTE_TYPE(X86_XSTATE), | ||||
| 		.size		= sizeof(long), | ||||
| 		.align		= sizeof(long), | ||||
| 		.active		= generic_fpregs_active, | ||||
|  |  | |||
|  | @ -193,7 +193,7 @@ enum xtensa_regset { | |||
| 
 | ||||
| static const struct user_regset xtensa_regsets[] = { | ||||
| 	[REGSET_GPR] = { | ||||
| 		.core_note_type = NT_PRSTATUS, | ||||
| 		USER_REGSET_NOTE_TYPE(PRSTATUS), | ||||
| 		.n = sizeof(struct user_pt_regs) / sizeof(u32), | ||||
| 		.size = sizeof(u32), | ||||
| 		.align = sizeof(u32), | ||||
|  | @ -201,7 +201,7 @@ static const struct user_regset xtensa_regsets[] = { | |||
| 		.set = gpr_set, | ||||
| 	}, | ||||
| 	[REGSET_TIE] = { | ||||
| 		.core_note_type = NT_PRFPREG, | ||||
| 		USER_REGSET_NOTE_TYPE(PRFPREG), | ||||
| 		.n = sizeof(elf_xtregs_t) / sizeof(u32), | ||||
| 		.size = 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... */ | ||||
| 	/* ...and their total size. */ | ||||
| 	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; | ||||
| 
 | ||||
| 	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; | ||||
| } | ||||
| 
 | ||||
| static void fill_note(struct memelfnote *note, const char *name, int type, | ||||
| 		unsigned int sz, void *data) | ||||
| static void __fill_note(struct memelfnote *note, const char *name, int type, | ||||
| 			unsigned int sz, void *data) | ||||
| { | ||||
| 	note->name = name; | ||||
| 	note->type = type; | ||||
|  | @ -1459,6 +1459,9 @@ static void fill_note(struct memelfnote *note, const char *name, int type, | |||
| 	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 | ||||
|  * 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 | ||||
| 		i += 2; | ||||
| 	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, | ||||
| 		const kernel_siginfo_t *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; | ||||
| 	fill_note(note, NN_FILE, NT_FILE, size, data); | ||||
| 	fill_note(note, FILE, size, data); | ||||
| 	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], | ||||
| 		   sizeof(t->prstatus.pr_reg), &t->prstatus.pr_reg); | ||||
| 
 | ||||
| 	fill_note(&t->notes[0], NN_PRSTATUS, NT_PRSTATUS, | ||||
| 		  PRSTATUS_SIZE, &t->prstatus); | ||||
| 	fill_note(&t->notes[0], PRSTATUS, PRSTATUS_SIZE, &t->prstatus); | ||||
| 	info->size += notesize(&t->notes[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) { | ||||
| 		const struct user_regset *regset = &view->regsets[view_iter]; | ||||
| 		int note_type = regset->core_note_type; | ||||
| 		const char *note_name = regset->core_note_name; | ||||
| 		bool is_fpreg = note_type == NT_PRFPREG; | ||||
| 		void *data; | ||||
| 		int ret; | ||||
|  | @ -1747,8 +1750,16 @@ static int fill_thread_core_info(struct elf_thread_core_info *t, | |||
| 		if (is_fpreg) | ||||
| 			SET_PR_FPVALID(&t->prstatus); | ||||
| 
 | ||||
| 		fill_note(&t->notes[note_iter], is_fpreg ? NN_PRFPREG : "LINUX", | ||||
| 			  note_type, ret, data); | ||||
| 		/* There should be a note name, but if not, guess: */ | ||||
| 		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]); | ||||
| 		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); | ||||
| 	elf_core_copy_task_regs(p, &t->prstatus.pr_reg); | ||||
| 
 | ||||
| 	fill_note(&t->notes[0], NN_PRSTATUS, NT_PRSTATUS, sizeof(t->prstatus), | ||||
| 		  &(t->prstatus)); | ||||
| 	fill_note(&t->notes[0], PRSTATUS, sizeof(t->prstatus), &t->prstatus); | ||||
| 	info->size += notesize(&t->notes[0]); | ||||
| 
 | ||||
| 	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; | ||||
| 	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]); | ||||
| 
 | ||||
| 	return 1; | ||||
|  | @ -1798,7 +1808,7 @@ static int fill_note_info(struct elfhdr *elf, int phdrs, | |||
| 	psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL); | ||||
| 	if (!psinfo) | ||||
| 		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 | ||||
| 	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; | ||||
| } | ||||
| 
 | ||||
| static inline void fill_note(struct memelfnote *note, const char *name, int type, | ||||
| 		unsigned int sz, void *data) | ||||
| static inline void __fill_note(struct memelfnote *note, const char *name, int type, | ||||
| 			       unsigned int sz, void *data) | ||||
| { | ||||
| 	note->name = name; | ||||
| 	note->type = type; | ||||
|  | @ -1285,6 +1285,9 @@ static inline void fill_note(struct memelfnote *note, const char *name, int type | |||
| 	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 | ||||
|  * 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], | ||||
| 		   sizeof(t->prstatus.pr_reg), &t->prstatus.pr_reg); | ||||
| 
 | ||||
| 	fill_note(&t->notes[0], NN_PRSTATUS, NT_PRSTATUS, sizeof(t->prstatus), | ||||
| 		  &t->prstatus); | ||||
| 	fill_note(&t->notes[0], PRSTATUS, sizeof(t->prstatus), &t->prstatus); | ||||
| 	t->num_notes++; | ||||
| 	*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) { | ||||
| 		fill_note(&t->notes[1], NN_PRFPREG, NT_PRFPREG, sizeof(t->fpu), | ||||
| 			  &t->fpu); | ||||
| 		fill_note(&t->notes[1], PRFPREG, sizeof(t->fpu), &t->fpu); | ||||
| 		t->num_notes++; | ||||
| 		*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_note(&psinfo_note, NN_PRPSINFO, NT_PRPSINFO, sizeof(*psinfo), psinfo); | ||||
| 	fill_note(&psinfo_note, PRPSINFO, sizeof(*psinfo), psinfo); | ||||
| 	thread_status_size += notesize(&psinfo_note); | ||||
| 
 | ||||
| 	auxv = (elf_addr_t *) current->mm->saved_auxv; | ||||
|  | @ -1539,7 +1540,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm) | |||
| 	do | ||||
| 		i += 2; | ||||
| 	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); | ||||
| 
 | ||||
| 	offset = sizeof(*elf);				/* ELF header */ | ||||
|  |  | |||
|  | @ -151,7 +151,8 @@ typedef int user_regset_writeback_fn(struct task_struct *target, | |||
|  * @align:		Required alignment, in bytes. | ||||
|  * @bias:		Bias from natural indexing. | ||||
|  * @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. | ||||
|  * @active:		Function to report if regset is active, 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) | ||||
|  * 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 | ||||
|  * offsetof(struct elf_prstatus, pr_reg) into the note data; that is | ||||
|  * part of the per-machine ELF formats userland knows about.  In | ||||
|  | @ -207,8 +212,13 @@ struct user_regset { | |||
| 	unsigned int 			align; | ||||
| 	unsigned int 			bias; | ||||
| 	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 | ||||
|  * @name:	Identifier, e.g. UTS_MACHINE string. | ||||
|  |  | |||
|  | @ -2743,7 +2743,7 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, | |||
| } | ||||
| #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, | ||||
| 					      size_t usize) | ||||
| { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds