cregit-Linux how code gets into the kernel

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

/* SPDX-License-Identifier: GPL-2.0 */
/*
 *  Copyright (C) 1991, 1992  Linus Torvalds
 *  Copyright (C) 2000, 2001, 2002 Andi Kleen, SuSE Labs
 */

#ifndef _ASM_X86_STACKTRACE_H

#define _ASM_X86_STACKTRACE_H

#include <linux/uaccess.h>
#include <linux/ptrace.h>
#include <asm/switch_to.h>


enum stack_type {
	
STACK_TYPE_UNKNOWN,
	
STACK_TYPE_TASK,
	
STACK_TYPE_IRQ,
	
STACK_TYPE_SOFTIRQ,
	
STACK_TYPE_EXCEPTION,
	
STACK_TYPE_EXCEPTION_LAST = STACK_TYPE_EXCEPTION + N_EXCEPTION_STACKS-1,
};


struct stack_info {
	
enum stack_type type;
	


unsigned long *begin, *end, *next_sp;
};

bool in_task_stack(unsigned long *stack, struct task_struct *task,
		   struct stack_info *info);

int get_stack_info(unsigned long *stack, struct task_struct *task,
		   struct stack_info *info, unsigned long *visit_mask);

const char *stack_type_name(enum stack_type type);


static inline bool on_stack(struct stack_info *info, void *addr, size_t len) { void *begin = info->begin; void *end = info->end; return (info->type != STACK_TYPE_UNKNOWN && addr >= begin && addr < end && addr + len > begin && addr + len <= end); }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf64100.00%1100.00%
Total64100.00%1100.00%

#ifdef CONFIG_X86_32 #define STACKSLOTS_PER_LINE 8 #else #define STACKSLOTS_PER_LINE 4 #endif #ifdef CONFIG_FRAME_POINTER
static inline unsigned long * get_frame_pointer(struct task_struct *task, struct pt_regs *regs) { if (regs) return (unsigned long *)regs->bp; if (task == current) return __builtin_frame_address(0); return &((struct inactive_task_frame *)task->thread.sp)->bp; }

Contributors

PersonTokensPropCommitsCommitProp
Soeren Sandmann Pedersen4369.35%125.00%
Josh Poimboeuf1320.97%250.00%
Brian Gerst69.68%125.00%
Total62100.00%4100.00%

#else
static inline unsigned long * get_frame_pointer(struct task_struct *task, struct pt_regs *regs) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Soeren Sandmann Pedersen1986.36%150.00%
Josh Poimboeuf313.64%150.00%
Total22100.00%2100.00%

#endif /* CONFIG_FRAME_POINTER */
static inline unsigned long * get_stack_pointer(struct task_struct *task, struct pt_regs *regs) { if (regs) return (unsigned long *)kernel_stack_pointer(regs); if (task == current) return __builtin_frame_address(0); return (unsigned long *)task->thread.sp; }

Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf58100.00%1100.00%
Total58100.00%1100.00%

void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, unsigned long *stack, char *log_lvl); extern unsigned int code_bytes; /* The form of the top of the frame on the stack */ struct stack_frame { struct stack_frame *next_frame; unsigned long return_address; }; struct stack_frame_ia32 { u32 next_frame; u32 return_address; };
static inline unsigned long caller_frame_pointer(void) { struct stack_frame *frame; frame = __builtin_frame_address(0); #ifdef CONFIG_FRAME_POINTER frame = frame->next_frame; #endif return (unsigned long)frame; }

Contributors

PersonTokensPropCommitsCommitProp
Frédéric Weisbecker3690.00%266.67%
Josh Poimboeuf410.00%133.33%
Total40100.00%3100.00%

#endif /* _ASM_X86_STACKTRACE_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Josh Poimboeuf23854.34%436.36%
Frédéric Weisbecker10924.89%218.18%
Soeren Sandmann Pedersen7216.44%19.09%
Brian Gerst92.05%19.09%
Andi Kleen61.37%19.09%
H. Peter Anvin30.68%19.09%
Greg Kroah-Hartman10.23%19.09%
Total438100.00%11100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.