forked from mirrors/linux
		
	 405b2fc663
			
		
	
	
		405b2fc663
		
	
	
	
	
		
			
			handling. Collecting per-thread register values is the only thing that needs to be ifdefed there... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQqUNBr3gm4hGXdBJlZ7Krx/gZQ6wUCY5ZyNgAKCRBZ7Krx/gZQ 63MZAQDZDE9Pk9EQ/3qOPNb2cuz8KSB3THUyotvustUUGPTUVAD/Ut1xD03jpWCY oQ6tM8dNyh3+Vsx6/XKNd1+pj6IgNQE= =XYkZ -----END PGP SIGNATURE----- Merge tag 'pull-elfcore' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs Pull elf coredumping updates from Al Viro: "Unification of regset and non-regset sides of ELF coredump handling. Collecting per-thread register values is the only thing that needs to be ifdefed there..." * tag 'pull-elfcore' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: [elf] get rid of get_note_info_size() [elf] unify regset and non-regset cases [elf][non-regset] use elf_core_copy_task_regs() for dumper as well [elf][non-regset] uninline elf_core_copy_task_fpregs() (and lose pt_regs argument) elf_core_copy_task_regs(): task_pt_regs is defined everywhere [elf][regset] simplify thread list handling in fill_note_info() [elf][regset] clean fill_note_info() a bit kill extern of vsyscall32_sysctl kill coredump_params->regs kill signal_pt_regs()
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef _LINUX_COREDUMP_H
 | |
| #define _LINUX_COREDUMP_H
 | |
| 
 | |
| #include <linux/types.h>
 | |
| #include <linux/mm.h>
 | |
| #include <linux/fs.h>
 | |
| #include <asm/siginfo.h>
 | |
| 
 | |
| #ifdef CONFIG_COREDUMP
 | |
| struct core_vma_metadata {
 | |
| 	unsigned long start, end;
 | |
| 	unsigned long flags;
 | |
| 	unsigned long dump_size;
 | |
| 	unsigned long pgoff;
 | |
| 	struct file   *file;
 | |
| };
 | |
| 
 | |
| struct coredump_params {
 | |
| 	const kernel_siginfo_t *siginfo;
 | |
| 	struct file *file;
 | |
| 	unsigned long limit;
 | |
| 	unsigned long mm_flags;
 | |
| 	int cpu;
 | |
| 	loff_t written;
 | |
| 	loff_t pos;
 | |
| 	loff_t to_skip;
 | |
| 	int vma_count;
 | |
| 	size_t vma_data_size;
 | |
| 	struct core_vma_metadata *vma_meta;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * These are the only things you should do on a core-file: use only these
 | |
|  * functions to write out all the necessary info.
 | |
|  */
 | |
| extern void dump_skip_to(struct coredump_params *cprm, unsigned long to);
 | |
| extern void dump_skip(struct coredump_params *cprm, size_t nr);
 | |
| extern int dump_emit(struct coredump_params *cprm, const void *addr, int nr);
 | |
| extern int dump_align(struct coredump_params *cprm, int align);
 | |
| int dump_user_range(struct coredump_params *cprm, unsigned long start,
 | |
| 		    unsigned long len);
 | |
| extern void do_coredump(const kernel_siginfo_t *siginfo);
 | |
| #else
 | |
| static inline void do_coredump(const kernel_siginfo_t *siginfo) {}
 | |
| #endif
 | |
| 
 | |
| #if defined(CONFIG_COREDUMP) && defined(CONFIG_SYSCTL)
 | |
| extern void validate_coredump_safety(void);
 | |
| #else
 | |
| static inline void validate_coredump_safety(void) {}
 | |
| #endif
 | |
| 
 | |
| #endif /* _LINUX_COREDUMP_H */
 |