From: Sebastian Andrzej Siewior <bige...@linutronix.de>

Powerpc32/64 does not compile because TIF_SYSCALL_TRACE's bit is higher
than 15 and the assembly instructions don't expect that.

Move TIF_RESTOREALL, TIF_NOERROR to the higher bits and keep
TIF_NEED_RESCHED_LAZY in the lower range. As a result one split load is
needed and otherwise we can use immediates.

Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de>

Backport a commit from linux-v5.0.5-rt3 to to fix the following
build error for powerpc:
[https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git/commit/?h=linux-5.0.y-rt&id=140bf8deb0fa9607a85ecd6241d64e80c7817e8c]

Error: operand out of range (0x0000000000208690 is not between
0x0000000000000000 and 0x000000000000ffff)

Signed-off-by: Hongzhi.Song <hongzhi.s...@windriver.com>
---
 arch/powerpc/include/asm/thread_info.h | 13 ++++++++-----
 arch/powerpc/kernel/entry_32.S         | 12 +++++++-----
 arch/powerpc/kernel/entry_64.S         | 12 +++++++-----
 3 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/arch/powerpc/include/asm/thread_info.h 
b/arch/powerpc/include/asm/thread_info.h
index 7e542e7..f913239 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
@@ -90,7 +90,7 @@ void arch_setup_new_exec(void);
 /*
  * thread information flag bit numbers
  */
-#define TIF_NEED_RESCHED_LAZY  0       /* lazy rescheduling necessary */
+#define TIF_SYSCALL_TRACE      0       /* syscall trace active */
 #define TIF_SIGPENDING         1       /* signal pending */
 #define TIF_NEED_RESCHED       2       /* rescheduling necessary */
 #define TIF_FSCHECK            3       /* Check FS is USER_DS on return */
@@ -101,11 +101,12 @@ void arch_setup_new_exec(void);
 #define TIF_SINGLESTEP         8       /* singlestepping active */
 #define TIF_NOHZ               9       /* in adaptive nohz mode */
 #define TIF_SECCOMP            10      /* secure computing */
-#define TIF_RESTOREALL         11      /* Restore all regs (implies NOERROR) */
-#define TIF_NOERROR            12      /* Force successful syscall return */
+
+#define TIF_NEED_RESCHED_LAZY  11      /* lazy rescheduling necessary */
+#define TIF_SYSCALL_TRACEPOINT 12      /* syscall tracepoint instrumentation */
+
 #define TIF_NOTIFY_RESUME      13      /* callback before returning to user */
 #define TIF_UPROBE             14      /* breakpointed or single-stepping */
-#define TIF_SYSCALL_TRACEPOINT 15      /* syscall tracepoint instrumentation */
 #define TIF_EMULATE_STACK_STORE        16      /* Is an instruction emulation
                                                for stack store? */
 #define TIF_MEMDIE             17      /* is terminating due to OOM killer */
@@ -114,7 +115,9 @@ void arch_setup_new_exec(void);
 #endif
 #define TIF_POLLING_NRFLAG     19      /* true if poll_idle() is polling 
TIF_NEED_RESCHED */
 #define TIF_32BIT              20      /* 32 bit binary */
-#define TIF_SYSCALL_TRACE      21      /* syscall trace active */
+#define TIF_RESTOREALL         21      /* Restore all regs (implies NOERROR) */
+#define TIF_NOERROR            22      /* Force successful syscall return */
+
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE     (1<<TIF_SYSCALL_TRACE)
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index 11d17ff..94f641f 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -393,7 +393,9 @@ ret_from_syscall:
        MTMSRD(r10)
        lwz     r9,TI_FLAGS(r12)
        li      r8,-MAX_ERRNO
-       andi.   
r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
+       lis     
r0,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)@h
+       ori     r0,r0, 
(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)@l
+       and.    r0,r9,r0
        bne-    syscall_exit_work
        cmplw   0,r3,r8
        blt+    syscall_exit_cont
@@ -511,13 +513,13 @@ syscall_dotrace:
        b       syscall_dotrace_cont
 
 syscall_exit_work:
-       andi.   r0,r9,_TIF_RESTOREALL
+       andis.  r0,r9,_TIF_RESTOREALL@h
        beq+    0f
        REST_NVGPRS(r1)
        b       2f
 0:     cmplw   0,r3,r8
        blt+    1f
-       andi.   r0,r9,_TIF_NOERROR
+       andis.  r0,r9,_TIF_NOERROR@h
        bne-    1f
        lwz     r11,_CCR(r1)                    /* Load CR */
        neg     r3,r3
@@ -526,12 +528,12 @@ syscall_exit_work:
 
 1:     stw     r6,RESULT(r1)   /* Save result */
        stw     r3,GPR3(r1)     /* Update return value */
-2:     andi.   r0,r9,(_TIF_PERSYSCALL_MASK)
+2:     andis.  r0,r9,(_TIF_PERSYSCALL_MASK)@h
        beq     4f
 
        /* Clear per-syscall TIF flags if any are set.  */
 
-       li      r11,_TIF_PERSYSCALL_MASK
+       lis     r11,_TIF_PERSYSCALL_MASK@h
        addi    r12,r12,TI_FLAGS
 3:     lwarx   r8,0,r12
        andc    r8,r8,r11
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index fcf8fe6..d857823 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -253,7 +253,9 @@ system_call_exit:
 
        ld      r9,TI_FLAGS(r12)
        li      r11,-MAX_ERRNO
-       andi.   
r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
+       lis     
r0,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)@h
+       ori     
r0,r0,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)@l
+       and.    r0,r9,r0
        bne-    .Lsyscall_exit_work
 
        andi.   r0,r8,MSR_FP
@@ -370,25 +372,25 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
        /* If TIF_RESTOREALL is set, don't scribble on either r3 or ccr.
         If TIF_NOERROR is set, just save r3 as it is. */
 
-       andi.   r0,r9,_TIF_RESTOREALL
+       andis.  r0,r9,_TIF_RESTOREALL@h
        beq+    0f
        REST_NVGPRS(r1)
        b       2f
 0:     cmpld   r3,r11          /* r11 is -MAX_ERRNO */
        blt+    1f
-       andi.   r0,r9,_TIF_NOERROR
+       andis.  r0,r9,_TIF_NOERROR@h
        bne-    1f
        ld      r5,_CCR(r1)
        neg     r3,r3
        oris    r5,r5,0x1000    /* Set SO bit in CR */
        std     r5,_CCR(r1)
 1:     std     r3,GPR3(r1)
-2:     andi.   r0,r9,(_TIF_PERSYSCALL_MASK)
+2:     andis.  r0,r9,(_TIF_PERSYSCALL_MASK)@h
        beq     4f
 
        /* Clear per-syscall TIF flags if any are set.  */
 
-       li      r11,_TIF_PERSYSCALL_MASK
+       lis     r11,(_TIF_PERSYSCALL_MASK)@h
        addi    r12,r12,TI_FLAGS
 3:     ldarx   r10,0,r12
        andc    r10,r10,r11
-- 
2.8.1

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to