cregit-Linux how code gets into the kernel

Release 4.14 arch/x86/include/asm/unwind.h

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_X86_UNWIND_H

#define _ASM_X86_UNWIND_H

#include <linux/sched.h>
#include <linux/ftrace.h>
#include <asm/ptrace.h>
#include <asm/stacktrace.h>


struct unwind_state {
	
struct stack_info stack_info;
	
unsigned long stack_mask;
	
struct task_struct *task;
	
int graph_idx;
	
bool error;
#if defined(CONFIG_ORC_UNWINDER)
	

bool signal, full_regs;
	


unsigned long sp, bp, ip;
	
struct pt_regs *regs;
#elif defined(CONFIG_FRAME_POINTER_UNWINDER)
	
bool got_irq;
	


unsigned long *bp, *orig_sp, ip;
	
struct pt_regs *regs;
#else
	
unsigned long *sp;
#endif
};

void __unwind_start(struct unwind_state *state, struct task_struct *task,
		    struct pt_regs *regs, unsigned long *first_frame);
bool unwind_next_frame(struct unwind_state *state);
unsigned long unwind_get_return_address(struct unwind_state *state);
unsigned long *unwind_get_return_address_ptr(struct unwind_state *state);


static inline bool unwind_done(struct unwind_state *state) { return state->stack_info.type == STACK_TYPE_UNKNOWN; }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf21100.00%1100.00%
Total21100.00%1100.00%


static inline bool unwind_error(struct unwind_state *state) { return state->error; }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf17100.00%1100.00%
Total17100.00%1100.00%


static inline void unwind_start(struct unwind_state *state, struct task_struct *task, struct pt_regs *regs, unsigned long *first_frame) { first_frame = first_frame ? : get_stack_pointer(task, regs); __unwind_start(state, task, regs, first_frame); }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf50100.00%1100.00%
Total50100.00%1100.00%

#if defined(CONFIG_ORC_UNWINDER) || defined(CONFIG_FRAME_POINTER_UNWINDER)
static inline struct pt_regs *unwind_get_entry_regs(struct unwind_state *state) { if (unwind_done(state)) return NULL; return state->regs; }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf29100.00%3100.00%
Total29100.00%3100.00%

#else
static inline struct pt_regs *unwind_get_entry_regs(struct unwind_state *state) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf17100.00%1100.00%
Total17100.00%1100.00%

#endif #ifdef CONFIG_ORC_UNWINDER void unwind_init(void); void unwind_module_init(struct module *mod, void *orc_ip, size_t orc_ip_size, void *orc, size_t orc_size); #else
static inline void unwind_init(void) {}

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf8100.00%2100.00%
Total8100.00%2100.00%


static inline void unwind_module_init(struct module *mod, void *orc_ip, size_t orc_ip_size, void *orc, size_t orc_size) {}

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf25100.00%2100.00%
Total25100.00%2100.00%

#endif /* * This disables KASAN checking when reading a value from another task's stack, * since the other task could be running on another CPU and could have poisoned * the stack in the meantime. */ #define READ_ONCE_TASK_STACK(task, x) \ ({ \ unsigned long val; \ if (task == current) \ val = READ_ONCE(x); \ else \ val = READ_ONCE_NOCHECK(x); \ val; \ })
static inline bool task_on_another_cpu(struct task_struct *task) { #ifdef CONFIG_SMP return task != current && task->on_cpu; #else return false; #endif }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf31100.00%1100.00%
Total31100.00%1100.00%

#endif /* _ASM_X86_UNWIND_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf41699.76%888.89%
Greg Kroah-Hartman10.24%111.11%
Total417100.00%9100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.