From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751736AbdKHJpb (ORCPT ); Wed, 8 Nov 2017 04:45:31 -0500 Received: from mail-ot0-f195.google.com ([74.125.82.195]:50787 "EHLO mail-ot0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751634AbdKHJp3 (ORCPT ); Wed, 8 Nov 2017 04:45:29 -0500 X-Google-Smtp-Source: AGs4zMa5UepjSI6fYe++P2yugL2v5MxOipNBF5Wd6PC5lq/Z+G2W6TfdFx98y8hAnK0nJ933dskiCreetM22TtjJF4w= MIME-Version: 1.0 In-Reply-To: References: From: Arnd Bergmann Date: Wed, 8 Nov 2017 10:45:28 +0100 X-Google-Sender-Auth: W9SYqOIBXFOEshaC_9UKaxjhh3U Message-ID: Subject: Re: [PATCH 18/31] nds32: Library functions To: Greentime Hu Cc: greentime@andestech.com, Linux Kernel Mailing List , linux-arch , Thomas Gleixner , Jason Cooper , Marc Zyngier , Rob Herring , Networking , Vincent Chen Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 8, 2017 at 6:55 AM, Greentime Hu wrote: > +#define get_user(x,p) \ > + ({ \ > + const register typeof(*(p)) __user *__p asm("$r0") = (p);\ > + register unsigned long __r2 asm("$r2"); \ > + register int __e asm("$r0"); \ > + switch (sizeof(*(__p))) { \ > + case 1: \ > + __get_user_x(__r2, __p, __e, 1, "$lp"); \ > + break; \ > + case 2: \ > + __get_user_x(__r2, __p, __e, 2, "$lp"); \ > + break; \ > + case 4: \ > + __get_user_x(__r2, __p, __e, 4, "$lp"); \ > + break; \ > + case 8: \ > + __get_user_x(__r2, __p, __e, 8, "$r3", "$lp"); \ > + break; \ > + default: __e = __get_user_bad(); break; \ > + } \ > + x = (typeof(*(p))) __r2; \ > + __e; \ > + }) Something looks odd here: __get_user_bad above looks like it is meant to provide a link-time error > +__get_user_bad_8: > + move $r3, #0 > +__get_user_bad: > + move $r2, #0 > + move $r0, #-EFAULT > + ret > + but here you actually have a symbol with that name, it gets turned into a runtime error. I think the first one needs to get renamed to actually work as expected and force the link error in built-in code (it works in modules ins __get_user_bad is not exported). > + > +__put_user_bad: > + move $r0, #-EFAULT > + ret > + same here. Arnd