mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-26 04:25:27 +08:00
ARC: pt_regs update #2: Remove unused gutter at start of pt_regs
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
This commit is contained in:
parent
283237a04f
commit
2fa919045b
@ -432,9 +432,6 @@
|
|||||||
st.a r9, [sp, -4]
|
st.a r9, [sp, -4]
|
||||||
lr r9, [erbta]
|
lr r9, [erbta]
|
||||||
st.a r9, [sp, -4]
|
st.a r9, [sp, -4]
|
||||||
|
|
||||||
/* move up by 1 word to "create" pt_regs->"stack_place_holder" */
|
|
||||||
sub sp, sp, 4
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*--------------------------------------------------------------
|
/*--------------------------------------------------------------
|
||||||
@ -474,9 +471,6 @@
|
|||||||
* by hardware and that is not good.
|
* by hardware and that is not good.
|
||||||
*-------------------------------------------------------------*/
|
*-------------------------------------------------------------*/
|
||||||
.macro RESTORE_ALL_SYS
|
.macro RESTORE_ALL_SYS
|
||||||
|
|
||||||
add sp, sp, 4 /* hop over unused "pt_regs->stack_place_holder" */
|
|
||||||
|
|
||||||
ld.ab r9, [sp, 4]
|
ld.ab r9, [sp, 4]
|
||||||
sr r9, [erbta]
|
sr r9, [erbta]
|
||||||
ld.ab r9, [sp, 4]
|
ld.ab r9, [sp, 4]
|
||||||
@ -530,9 +524,6 @@
|
|||||||
st.a r9, [sp, -4]
|
st.a r9, [sp, -4]
|
||||||
lr r9, [bta_l1]
|
lr r9, [bta_l1]
|
||||||
st.a r9, [sp, -4]
|
st.a r9, [sp, -4]
|
||||||
|
|
||||||
/* move up by 1 word to "create" pt_regs->"stack_place_holder" */
|
|
||||||
sub sp, sp, 4
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro SAVE_ALL_INT2
|
.macro SAVE_ALL_INT2
|
||||||
@ -561,9 +552,6 @@
|
|||||||
st.a r9, [sp, -4]
|
st.a r9, [sp, -4]
|
||||||
lr r9, [bta_l2]
|
lr r9, [bta_l2]
|
||||||
st.a r9, [sp, -4]
|
st.a r9, [sp, -4]
|
||||||
|
|
||||||
/* move up by 1 word to "create" pt_regs->"stack_place_holder" */
|
|
||||||
sub sp, sp, 4
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*--------------------------------------------------------------
|
/*--------------------------------------------------------------
|
||||||
@ -577,8 +565,6 @@
|
|||||||
*-------------------------------------------------------------*/
|
*-------------------------------------------------------------*/
|
||||||
|
|
||||||
.macro RESTORE_ALL_INT1
|
.macro RESTORE_ALL_INT1
|
||||||
add sp, sp, 4 /* hop over unused "pt_regs->stack_place_holder" */
|
|
||||||
|
|
||||||
ld.ab r9, [sp, 4] /* Actual reg file */
|
ld.ab r9, [sp, 4] /* Actual reg file */
|
||||||
sr r9, [bta_l1]
|
sr r9, [bta_l1]
|
||||||
ld.ab r9, [sp, 4]
|
ld.ab r9, [sp, 4]
|
||||||
@ -601,8 +587,6 @@
|
|||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro RESTORE_ALL_INT2
|
.macro RESTORE_ALL_INT2
|
||||||
add sp, sp, 4 /* hop over unused "pt_regs->stack_place_holder" */
|
|
||||||
|
|
||||||
ld.ab r9, [sp, 4]
|
ld.ab r9, [sp, 4]
|
||||||
sr r9, [bta_l2]
|
sr r9, [bta_l2]
|
||||||
ld.ab r9, [sp, 4]
|
ld.ab r9, [sp, 4]
|
||||||
|
@ -17,12 +17,6 @@
|
|||||||
/* THE pt_regs: Defines how regs are saved during entry into kernel */
|
/* THE pt_regs: Defines how regs are saved during entry into kernel */
|
||||||
|
|
||||||
struct pt_regs {
|
struct pt_regs {
|
||||||
/*
|
|
||||||
* 1 word gutter after reg-file has been saved
|
|
||||||
* Technically not needed, Since SP always points to a "full" location
|
|
||||||
* (vs. "empty"). But pt_regs is shared with tools....
|
|
||||||
*/
|
|
||||||
long res;
|
|
||||||
|
|
||||||
/* Real registers */
|
/* Real registers */
|
||||||
long bta; /* bta_l1, bta_l2, erbta */
|
long bta; /* bta_l1, bta_l2, erbta */
|
||||||
|
@ -20,16 +20,19 @@
|
|||||||
*
|
*
|
||||||
* This is to decouple pt_regs from user-space ABI, to be able to change it
|
* This is to decouple pt_regs from user-space ABI, to be able to change it
|
||||||
* w/o affecting the ABI.
|
* w/o affecting the ABI.
|
||||||
* Although the layout (initial padding) is similar to pt_regs to have some
|
*
|
||||||
* optimizations when copying pt_regs to/from user_regs_struct.
|
* The intermediate pad,pad2 are relics of initial layout based on pt_regs
|
||||||
|
* for optimizations when copying pt_regs to/from user_regs_struct.
|
||||||
|
* We no longer need them, but can't be changed as they are part of ABI now.
|
||||||
*
|
*
|
||||||
* Also, sigcontext only care about the scratch regs as that is what we really
|
* Also, sigcontext only care about the scratch regs as that is what we really
|
||||||
* save/restore for signal handling.
|
* save/restore for signal handling. However gdb also uses the same struct
|
||||||
|
* hence callee regs need to be in there too.
|
||||||
*/
|
*/
|
||||||
struct user_regs_struct {
|
struct user_regs_struct {
|
||||||
|
|
||||||
|
long pad;
|
||||||
struct {
|
struct {
|
||||||
long pad;
|
|
||||||
long bta, lp_start, lp_end, lp_count;
|
long bta, lp_start, lp_end, lp_count;
|
||||||
long status32, ret, blink, fp, gp;
|
long status32, ret, blink, fp, gp;
|
||||||
long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0;
|
long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0;
|
||||||
|
@ -40,6 +40,13 @@ static int genregs_get(struct task_struct *target,
|
|||||||
offsetof(struct user_regs_struct, LOC), \
|
offsetof(struct user_regs_struct, LOC), \
|
||||||
offsetof(struct user_regs_struct, LOC) + 4);
|
offsetof(struct user_regs_struct, LOC) + 4);
|
||||||
|
|
||||||
|
#define REG_O_ZERO(LOC) \
|
||||||
|
if (!ret) \
|
||||||
|
ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf, \
|
||||||
|
offsetof(struct user_regs_struct, LOC), \
|
||||||
|
offsetof(struct user_regs_struct, LOC) + 4);
|
||||||
|
|
||||||
|
REG_O_ZERO(pad);
|
||||||
REG_O_CHUNK(scratch, callee, ptregs);
|
REG_O_CHUNK(scratch, callee, ptregs);
|
||||||
REG_O_CHUNK(callee, efa, cregs);
|
REG_O_CHUNK(callee, efa, cregs);
|
||||||
REG_O_CHUNK(efa, stop_pc, &target->thread.fault_address);
|
REG_O_CHUNK(efa, stop_pc, &target->thread.fault_address);
|
||||||
@ -88,6 +95,7 @@ static int genregs_set(struct task_struct *target,
|
|||||||
offsetof(struct user_regs_struct, LOC), \
|
offsetof(struct user_regs_struct, LOC), \
|
||||||
offsetof(struct user_regs_struct, LOC) + 4);
|
offsetof(struct user_regs_struct, LOC) + 4);
|
||||||
|
|
||||||
|
REG_IGNORE_ONE(pad);
|
||||||
/* TBD: disallow updates to STATUS32, orig_r8 etc*/
|
/* TBD: disallow updates to STATUS32, orig_r8 etc*/
|
||||||
REG_IN_CHUNK(scratch, callee, ptregs); /* pt_regs[bta..orig_r8] */
|
REG_IN_CHUNK(scratch, callee, ptregs); /* pt_regs[bta..orig_r8] */
|
||||||
REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */
|
REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */
|
||||||
|
Loading…
Reference in New Issue
Block a user