From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-11.6 required=3.0 tests=AWL,BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS, USER_IN_DEF_DKIM_WL shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id B60A31F45E for ; Mon, 10 Feb 2020 21:27:18 +0000 (UTC) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:subject:in-reply-to:cc:from:to:message-id :mime-version:content-type:content-transfer-encoding; q=dns; s= default; b=w5YpaPA/RfB9GH1c0wN0k8O8PGYAAIfXAL60/kNMfalSYkIx0EyVe NbE9cYQJMNU+S2EpocNDOD+Si3LB/612NK5kJsTWokbCMR2jhmFvZLpSqnkG/6jx Hjcq9ZkO8KlkFsztTg9x0R14L7jltzQwfpzaXrlKQ0IQNjWsoBGdcQ= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:subject:in-reply-to:cc:from:to:message-id :mime-version:content-type:content-transfer-encoding; s=default; bh=SdllthHeNDb432fCA0HSqvS27Gk=; b=R4SNzEQ3bGsks8PcZ4GJ19jW1d69 qiPeM0g1dZk2ugSfdO8tCCWoNO5dTy88TwzFrj18DCoJqDIikGipUM6ERPLlshyh wvHXcFlH0ulMJXJV0V+qYFo8LvrtALkeQZrksrzCIOvBfzLTfRhyO8x6JgjWfvfi DMKWCXBrUyFRREo= Received: (qmail 43325 invoked by alias); 10 Feb 2020 21:27:15 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 43309 invoked by uid 89); 10 Feb 2020 21:27:15 -0000 Authentication-Results: sourceware.org; auth=none X-HELO: mail-pg1-f177.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:subject:in-reply-to:cc:from:to:message-id:mime-version :content-transfer-encoding; bh=MlXCp84EA9lgVdiRLBVFS8VqBuwmQP6LZzJed6nqnFY=; b=knnpRH6KXmada+WkQ78fcQZYoiV31qWNRQfGr5iPSBwA1H5dx2cfFUlmupOgFo5zjb H5S5HKz8SSyesKgVXMT/Tdj3c1XCD4iCKEp9z1dZvcHw/sguu5+vJ9FDMFQH65d5Ca4I mKUQZTt7qmilkFCmSJPujLndm+jrRsEKoumCMhH3t0DeK8MHCX1xcV1K3r4oCLTzKNm6 YhHiBIuNpI0hrb23IAP5nsqu9XwTtmtgIJy/e/9FN/2iiGx32u60m1Grcz8+//8nQLSo CBC0ODxxP0chaN5LpVSlmkraw9c2ceBHOaFgHspkZRgk8mRxhbiyBv3Ws7okVQo6s9MT Urpg== Date: Mon, 10 Feb 2020 13:27:11 -0800 (PST) X-Google-Original-Date: Mon, 10 Feb 2020 13:27:08 PST (-0800) Subject: Re: [PATCH 10/15] riscv: Avoid clobbering register parameters in syscall In-Reply-To: CC: adhemerval.zanella@linaro.org, libc-alpha@sourceware.org From: Palmer Dabbelt To: dj@redhat.com Message-ID: Mime-Version: 1.0 (MHng) Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On Mon, 10 Feb 2020 11:51:05 PST (-0800), dj@redhat.com wrote: > > Adhemerval Zanella writes: >> long int _sys_result; \ >> + long int _arg0 = (long int) (arg0); \ >> \ >> { \ >> register long int __a7 asm ("a7") = number; \ >> - register long int __a0 asm ("a0") = (long int) (arg0); \ >> + register long int __a0 asm ("a0") = _arg0; \ > > Ok Ya, thanks -- I found this behavior super surprising. I'm assuming you're commiting this one (you is Adhemerval here)? > >> long int _sys_result; \ >> + long int _arg0 = (long int) (arg0); \ >> + long int _arg1 = (long int) (arg1); \ >> \ >> { \ >> register long int __a7 asm ("a7") = number; \ >> - register long int __a0 asm ("a0") = (long int) (arg0); \ >> - register long int __a1 asm ("a1") = (long int) (arg1); \ >> + register long int __a0 asm ("a0") = _arg0; \ >> + register long int __a1 asm ("a1") = _arg1; \ > > Ok. > >> long int _sys_result; \ >> + long int _arg0 = (long int) (arg0); \ >> + long int _arg1 = (long int) (arg1); \ >> + long int _arg2 = (long int) (arg2); \ >> \ >> { \ >> register long int __a7 asm ("a7") = number; \ >> - register long int __a0 asm ("a0") = (long int) (arg0); \ >> - register long int __a1 asm ("a1") = (long int) (arg1); \ >> - register long int __a2 asm ("a2") = (long int) (arg2); \ >> + register long int __a0 asm ("a0") = _arg0; \ >> + register long int __a1 asm ("a1") = _arg1; \ >> + register long int __a2 asm ("a2") = _arg2; \ > > Ok. > >> long int _sys_result; \ >> + long int _arg0 = (long int) (arg0); \ >> + long int _arg1 = (long int) (arg1); \ >> + long int _arg2 = (long int) (arg2); \ >> + long int _arg3 = (long int) (arg3); \ >> \ >> { \ >> register long int __a7 asm ("a7") = number; \ >> - register long int __a0 asm ("a0") = (long int) (arg0); \ >> - register long int __a1 asm ("a1") = (long int) (arg1); \ >> - register long int __a2 asm ("a2") = (long int) (arg2); \ >> - register long int __a3 asm ("a3") = (long int) (arg3); \ >> + register long int __a0 asm ("a0") = _arg0; \ >> + register long int __a1 asm ("a1") = _arg1; \ >> + register long int __a2 asm ("a2") = _arg2; \ >> + register long int __a3 asm ("a3") = _arg3; \ > > Ok. > >> long int _sys_result; \ >> + long int _arg0 = (long int) (arg0); \ >> + long int _arg1 = (long int) (arg1); \ >> + long int _arg2 = (long int) (arg2); \ >> + long int _arg3 = (long int) (arg3); \ >> + long int _arg4 = (long int) (arg4); \ >> \ >> { \ >> register long int __a7 asm ("a7") = number; \ >> - register long int __a0 asm ("a0") = (long int) (arg0); \ >> - register long int __a1 asm ("a1") = (long int) (arg1); \ >> - register long int __a2 asm ("a2") = (long int) (arg2); \ >> - register long int __a3 asm ("a3") = (long int) (arg3); \ >> - register long int __a4 asm ("a4") = (long int) (arg4); \ >> + register long int __a0 asm ("a0") = _arg0; \ >> + register long int __a1 asm ("a1") = _arg1; \ >> + register long int __a2 asm ("a2") = _arg2; \ >> + register long int __a3 asm ("a3") = _arg3; \ >> + register long int __a4 asm ("a4") = _arg4; \ > > Ok > >> ({ \ >> long int _sys_result; \ >> + long int _arg0 = (long int) (arg0); \ >> + long int _arg1 = (long int) (arg1); \ >> + long int _arg2 = (long int) (arg2); \ >> + long int _arg3 = (long int) (arg3); \ >> + long int _arg4 = (long int) (arg4); \ >> + long int _arg5 = (long int) (arg5); \ >> \ >> { \ >> register long int __a7 asm ("a7") = number; \ >> - register long int __a0 asm ("a0") = (long int) (arg0); \ >> - register long int __a1 asm ("a1") = (long int) (arg1); \ >> - register long int __a2 asm ("a2") = (long int) (arg2); \ >> - register long int __a3 asm ("a3") = (long int) (arg3); \ >> - register long int __a4 asm ("a4") = (long int) (arg4); \ >> - register long int __a5 asm ("a5") = (long int) (arg5); \ >> + register long int __a0 asm ("a0") = _arg0; \ >> + register long int __a1 asm ("a1") = _arg1; \ >> + register long int __a2 asm ("a2") = _arg2; \ >> + register long int __a3 asm ("a3") = _arg3; \ >> + register long int __a4 asm ("a4") = _arg4; \ >> + register long int __a5 asm ("a5") = _arg5; \ > > Ok. > >> long int _sys_result; \ >> + long int _arg0 = (long int) (arg0); \ >> + long int _arg1 = (long int) (arg1); \ >> + long int _arg2 = (long int) (arg2); \ >> + long int _arg3 = (long int) (arg3); \ >> + long int _arg4 = (long int) (arg4); \ >> + long int _arg5 = (long int) (arg5); \ >> + long int _arg6 = (long int) (arg6); \ >> \ >> { \ >> register long int __a7 asm ("a7") = number; \ >> - register long int __a0 asm ("a0") = (long int) (arg0); \ >> - register long int __a1 asm ("a1") = (long int) (arg1); \ >> - register long int __a2 asm ("a2") = (long int) (arg2); \ >> - register long int __a3 asm ("a3") = (long int) (arg3); \ >> - register long int __a4 asm ("a4") = (long int) (arg4); \ >> - register long int __a5 asm ("a5") = (long int) (arg5); \ >> - register long int __a6 asm ("a6") = (long int) (arg6); \ >> + register long int __a0 asm ("a0") = _arg0; \ >> + register long int __a1 asm ("a1") = _arg1; \ >> + register long int __a2 asm ("a2") = _arg2; \ >> + register long int __a3 asm ("a3") = _arg3; \ >> + register long int __a4 asm ("a4") = _arg4; \ >> + register long int __a5 asm ("a5") = _arg5; \ >> + register long int __a6 asm ("a6") = _arg6; \ > > Ok. > > Reviewed-by: DJ Delorie Reviewed-by: Palmer Dabbelt Thanks!