On 06/30/2020 04:33 PM, Segher Boessenkool wrote:
On Tue, Jun 30, 2020 at 04:55:05PM +0200, Christophe Leroy wrote:
Le 30/06/2020 à 03:19, Michael Ellerman a écrit :
Michael Ellerman <m...@ellerman.id.au> writes:
Because it uses the "m<>" constraint which didn't work on GCC 4.6.


So we should be able to pick it up for v5.9 hopefully.

It seems to break the build with the kernel.org 4.9.4 compiler and

Looks like 4.9.4 doesn't accept "m<>" constraint either.

The evidence contradicts this assertion.

Changing it to "m" make it build.

But that just means something else is wrong.

+ make -s CC=powerpc64-linux-gnu-gcc -j 160
In file included from /linux/include/linux/uaccess.h:11:0,
                  from /linux/include/linux/sched/task.h:11,
                  from /linux/include/linux/sched/signal.h:9,
                  from /linux/include/linux/rcuwait.h:6,
                  from /linux/include/linux/percpu-rwsem.h:7,
                  from /linux/include/linux/fs.h:33,
                  from /linux/include/linux/huge_mm.h:8,
                  from /linux/include/linux/mm.h:675,
                  from /linux/arch/powerpc/kernel/signal_32.c:17:
/linux/arch/powerpc/kernel/signal_32.c: In function
/linux/arch/powerpc/include/asm/uaccess.h:161:2: error: 'asm' operand has
impossible constraints
   __asm__ __volatile__(     \
/linux/arch/powerpc/include/asm/uaccess.h:197:12: note: in expansion of
macro '__put_user_asm'
     case 4: __put_user_asm(x, ptr, retval, "stw"); break; \
/linux/arch/powerpc/include/asm/uaccess.h:206:2: note: in expansion of
macro '__put_user_size_allowed'
   __put_user_size_allowed(x, ptr, size, retval);  \
/linux/arch/powerpc/include/asm/uaccess.h:220:2: note: in expansion of
macro '__put_user_size'
   __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \
/linux/arch/powerpc/include/asm/uaccess.h:96:2: note: in expansion of
macro '__put_user_nocheck'
   __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
/linux/arch/powerpc/kernel/signal_32.c:120:7: note: in expansion of macro
    if (__put_user((unsigned int)gregs[i], &frame->mc_gregs[i]))

Can we see what that was after the macro jungle?  Like, the actual
preprocessed code?

Sorry for previous misunderstanding

Here is the code:

#define __put_user_asm(x, addr, err, op)                        \
        __asm__ __volatile__(                                   \
                "1:        " op "%U2%X2 %1,%2    # put_user\n"      \
                "2:\n"                                                \
                ".section .fixup,\"ax\"\n"                  \
                "3:        li %0,%3\n"                                \
                "  b 2b\n"                                    \
                ".previous\n"                                 \
                EX_TABLE(1b, 3b)                                \
                : "=r" (err)                                  \
                : "r" (x), "m<>" (*addr), "i" (-EFAULT), "0" (err))


Reply via email to