📄 registers.h
字号:
/* registers.h: register frame declarations * * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. *//* * notes: * * (1) that the members of all these structures are carefully aligned to permit * usage of STD/STDF instructions * * (2) if you change these structures, you must change the code in * arch/frvnommu/kernel/{break.S,entry.S,switch_to.S,gdb-stub.c} * * * the kernel stack space block looks like this: * * +0x2000 +---------------------- * | union { * | struct frv_frame0 { * | struct user_context { * | struct user_int_regs * | struct user_fpmedia_regs * | } * | struct frv_debug_regs * | } * | struct pt_regs [user exception] * | } * +---------------------- <-- __kernel_frame0_ptr (maybe GR28) * | * | kernel stack * | * |...................... * | struct pt_regs [kernel exception] * |...................... <-- __kernel_frame0_ptr (maybe GR28) * | * | kernel stack * | * |...................... <-- stack pointer (GR1) * | * | unused stack space * | * +---------------------- * | struct thread_info * +0x0000 +---------------------- <-- __current_thread_info (GR15); * * note that GR28 points to the current exception frame */#ifndef _ASM_REGISTERS_H#define _ASM_REGISTERS_H#ifndef __ASSEMBLY__#define __OFFSET(X,N) ((X)+(N)*4)#define __OFFSETC(X,N) xxxxxxxxxxxxxxxxxxxxxxxx#else#define __OFFSET(X,N) ((X)+(N)*4)#define __OFFSETC(X,N) ((X)+(N))#endif/*****************************************************************************//* * Exception/Interrupt frame * - held on kernel stack * - 8-byte aligned on stack (old SP is saved in frame) * - GR0 is fixed 0, so we don't save it */#ifndef __ASSEMBLY__struct pt_regs { unsigned long psr; /* Processor Status Register */ unsigned long isr; /* Integer Status Register */ unsigned long ccr; /* Condition Code Register */ unsigned long cccr; /* Condition Code for Conditional Insns Register */ unsigned long lr; /* Link Register */ unsigned long lcr; /* Loop Count Register */ unsigned long pc; /* Program Counter Register */ unsigned long __status; /* exception status */ unsigned long syscallno; /* syscall number or -1 */ unsigned long orig_gr8; /* original syscall arg #1 */ unsigned long gner0; unsigned long gner1; unsigned long long iacc0; unsigned long tbr; /* GR0 is fixed zero, so we use this for TBR */ unsigned long sp; /* GR1: USP/KSP */ unsigned long fp; /* GR2: FP */ unsigned long gr3; unsigned long gr4; unsigned long gr5; unsigned long gr6; unsigned long gr7; /* syscall number */ unsigned long gr8; /* 1st syscall param; syscall return */ unsigned long gr9; /* 2nd syscall param */ unsigned long gr10; /* 3rd syscall param */ unsigned long gr11; /* 4th syscall param */ unsigned long gr12; /* 5th syscall param */ unsigned long gr13; /* 6th syscall param */ unsigned long gr14; unsigned long gr15; unsigned long gr16; /* GP pointer */ unsigned long gr17; /* small data */ unsigned long gr18; /* PIC/PID */ unsigned long gr19; unsigned long gr20; unsigned long gr21; unsigned long gr22; unsigned long gr23; unsigned long gr24; unsigned long gr25; unsigned long gr26; unsigned long gr27; struct pt_regs *next_frame; /* GR28 - next exception frame */ unsigned long gr29; /* GR29 - OS reserved */ unsigned long gr30; /* GR30 - OS reserved */ unsigned long gr31; /* GR31 - OS reserved */} __attribute__((aligned(8)));#endif#define REG__STATUS_STEP 0x00000001 /* - reenable single stepping on return */#define REG__STATUS_STEPPED 0x00000002 /* - single step caused exception */#define REG__STATUS_BROKE 0x00000004 /* - BREAK insn caused exception */#define REG__STATUS_SYSC_ENTRY 0x40000000 /* - T on syscall entry (ptrace.c only) */#define REG__STATUS_SYSC_EXIT 0x80000000 /* - T on syscall exit (ptrace.c only) */#define REG_GR(R) __OFFSET(REG_GR0, (R))#define REG_SP REG_GR(1)#define REG_FP REG_GR(2)#define REG_PREV_FRAME REG_GR(28) /* previous exception frame pointer (old gr28 value) */#define REG_CURR_TASK REG_GR(29) /* current task *//*****************************************************************************//* * debugging registers */#ifndef __ASSEMBLY__struct frv_debug_regs{ unsigned long dcr; unsigned long ibar[4] __attribute__((aligned(8))); unsigned long dbar[4] __attribute__((aligned(8))); unsigned long dbdr[4][4] __attribute__((aligned(8))); unsigned long dbmr[4][4] __attribute__((aligned(8)));} __attribute__((aligned(8)));#endif/*****************************************************************************//* * userspace registers */#ifndef __ASSEMBLY__struct user_int_regs{ /* integer registers * - up to gr[31] mirror pt_regs * - total size must be multiple of 8 bytes */ unsigned long psr; /* Processor Status Register */ unsigned long isr; /* Integer Status Register */ unsigned long ccr; /* Condition Code Register */ unsigned long cccr; /* Condition Code for Conditional Insns Register */ unsigned long lr; /* Link Register */ unsigned long lcr; /* Loop Count Register */ unsigned long pc; /* Program Counter Register */ unsigned long __status; /* exception status */ unsigned long syscallno; /* syscall number or -1 */ unsigned long orig_gr8; /* original syscall arg #1 */ unsigned long gner[2]; unsigned long long iacc[1]; union { unsigned long tbr; unsigned long gr[64]; };};struct user_fpmedia_regs{ /* FP/Media registers */ unsigned long fr[64]; unsigned long fner[2]; unsigned long msr[2]; unsigned long acc[8]; unsigned char accg[8]; unsigned long fsr[1];};struct user_context{ struct user_int_regs i; struct user_fpmedia_regs f; /* we provide a context extension so that we can save the regs for CPUs that * implement many more of Fujitsu's lavish register spec */ void *extension;} __attribute__((aligned(8)));struct frv_frame0 { union { struct pt_regs regs; struct user_context uc; }; struct frv_debug_regs debug;} __attribute__((aligned(32)));#endif#define __INT_GR(R) __OFFSET(__INT_GR0, (R))#define __FPMEDIA_FR(R) __OFFSET(__FPMEDIA_FR0, (R))#define __FPMEDIA_FNER(R) __OFFSET(__FPMEDIA_FNER0, (R))#define __FPMEDIA_MSR(R) __OFFSET(__FPMEDIA_MSR0, (R))#define __FPMEDIA_ACC(R) __OFFSET(__FPMEDIA_ACC0, (R))#define __FPMEDIA_ACCG(R) __OFFSETC(__FPMEDIA_ACCG0, (R))#define __FPMEDIA_FSR(R) __OFFSET(__FPMEDIA_FSR0, (R))#define __THREAD_GR(R) __OFFSET(__THREAD_GR16, (R) - 16)#endif /* _ASM_REGISTERS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -