Skip to content

Commit d4624bf

Browse files
committed
ARCv2: entry: rearrange pt_regs slightly
Instead of r26,fp,sp,r12,r30 order as fp,r30,r12,r26,sp - keeps SP at well known position (right abive hardware autosave) - r26,r12 saved specifically for ARCv2 (and not in ARCv3) kept closer for easy ifdef'ry later Signed-off-by: Vineet Gupta <[email protected]>
1 parent 656f18a commit d4624bf

File tree

3 files changed

+15
-13
lines changed

3 files changed

+15
-13
lines changed

arch/arc/include/asm/entry-arcv2.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@
149149
*/
150150
.macro __SAVE_REGFILE_SOFT
151151

152-
ST2 gp, fp, PT_r26 ; gp (r26), fp (r27)
153-
154-
st r12, [sp, PT_r12]
152+
st fp, [sp, PT_fp] ; r27
155153
st r30, [sp, PT_r30]
154+
st r12, [sp, PT_r12]
155+
st r26, [sp, PT_r26] ; gp
156156

157157
; Saving pt_regs->sp correctly requires some extra work due to the way
158158
; Auto stack switch works
@@ -187,10 +187,10 @@
187187
/*------------------------------------------------------------------------*/
188188
.macro __RESTORE_REGFILE_SOFT
189189

190-
LD2 gp, fp, PT_r26 ; gp (r26), fp (r27)
191-
192-
ld r12, [sp, PT_r12]
190+
ld fp, [sp, PT_fp]
193191
ld r30, [sp, PT_r30]
192+
ld r12, [sp, PT_r12]
193+
ld r26, [sp, PT_r26]
194194

195195
; Restore SP (into AUX_USER_SP) only if returning to U mode
196196
; - for K mode, it will be implicitly restored as stack is unwound

arch/arc/include/asm/ptrace.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,10 @@ struct pt_regs {
7777

7878
unsigned long bta; /* erbta */
7979

80-
unsigned long r26; /* gp */
8180
unsigned long fp;
82-
unsigned long sp; /* user/kernel sp depending on where we came from */
83-
84-
unsigned long r12, r30;
81+
unsigned long r30;
82+
unsigned long r12;
83+
unsigned long r26; /* gp */
8584

8685
#ifdef CONFIG_ARC_HAS_ACCL_REGS
8786
unsigned long r58, r59; /* ACCL/ACCH used by FPU / DSP MPY */
@@ -90,6 +89,8 @@ struct pt_regs {
9089
unsigned long DSP_CTRL;
9190
#endif
9291

92+
unsigned long sp; /* user/kernel sp depending on entry */
93+
9394
/*------- Below list auto saved by h/w -----------*/
9495
unsigned long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
9596

arch/arc/kernel/asm-offsets.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,9 @@ int main(void)
6262
DEFINE(PT_r26, offsetof(struct pt_regs, r26));
6363
DEFINE(PT_ret, offsetof(struct pt_regs, ret));
6464
DEFINE(PT_blink, offsetof(struct pt_regs, blink));
65+
OFFSET(PT_fp, pt_regs, fp);
6566
DEFINE(PT_lpe, offsetof(struct pt_regs, lp_end));
6667
DEFINE(PT_lpc, offsetof(struct pt_regs, lp_count));
67-
DEFINE(SZ_CALLEE_REGS, sizeof(struct callee_regs));
68-
DEFINE(SZ_PT_REGS, sizeof(struct pt_regs));
69-
7068
#ifdef CONFIG_ISA_ARCV2
7169
OFFSET(PT_r12, pt_regs, r12);
7270
OFFSET(PT_r30, pt_regs, r30);
@@ -79,5 +77,8 @@ int main(void)
7977
OFFSET(PT_DSP_CTRL, pt_regs, DSP_CTRL);
8078
#endif
8179

80+
DEFINE(SZ_CALLEE_REGS, sizeof(struct callee_regs));
81+
DEFINE(SZ_PT_REGS, sizeof(struct pt_regs));
82+
8283
return 0;
8384
}

0 commit comments

Comments
 (0)