From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15833 invoked by alias); 13 Apr 2004 12:54:04 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 15482 invoked from network); 13 Apr 2004 12:54:03 -0000 Received: from unknown (HELO r-rr.iij4u.or.jp) (210.130.0.76) by sources.redhat.com with SMTP; 13 Apr 2004 12:54:03 -0000 Received: from localhost (frgw.3in.ne.jp [210.251.121.226]) by r-rr.iij4u.or.jp (8.11.6+IIJ/8.11.6) with ESMTP id i3DCs0025549 for ; Tue, 13 Apr 2004 21:54:00 +0900 (JST) Date: Tue, 13 Apr 2004 12:54:00 -0000 Message-Id: <20040413.214804.41651568.kkojima@rr.iij4u.or.jp> To: libc-hacker@sources.redhat.com Subject: Re: INTERNAL_SYSCALL and function calls in arguments From: Kaz Kojima In-Reply-To: References: <20040409071510.GA21965@suse.de> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2004-04/txt/msg00025.txt.bz2 Hi, Andreas Jaeger wrote: > But we should check all other platforms, a brief look shows: [snip] > - ppc,ppc64, sparc, alpha, sh, mips, hppa, : Might need changes The appended patch is for SH. Regards, kaz -- 2004-04-13 Kaz Kojima * sysdeps/unix/sysv/linux/sh/sysdep.h (SUBSTITUTE_ARGS_1) (SUBSTITUTE_ARGS_2, SUBSTITUTE_ARGS_3, SUBSTITUTE_ARGS_4) (SUBSTITUTE_ARGS_5, SUBSTITUTE_ARGS_6, SUBSTITUTE_ARGS_7): Load argument values into temporary variables. diff -u3prN ORIG/libc/sysdeps/unix/sysv/linux/sh/sysdep.h LOCAL/libc/sysdeps/unix/sysv/linux/sh/sysdep.h --- ORIG/libc/sysdeps/unix/sysv/linux/sh/sysdep.h Sun Nov 9 14:42:35 2003 +++ LOCAL/libc/sysdeps/unix/sysv/linux/sh/sysdep.h Tue Apr 13 11:20:33 2004 @@ -1,4 +1,5 @@ -/* Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2002, + 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, , August 1995. Changed by Kaz Kojima, . @@ -244,40 +245,68 @@ #define SUBSTITUTE_ARGS_0() #define SUBSTITUTE_ARGS_1(arg1) \ - register long r4 asm ("%r4") = (long)(arg1) + long _arg1 = (long) (arg1); \ + register long r4 asm ("%r4") = (long)(_arg1) #define SUBSTITUTE_ARGS_2(arg1, arg2) \ - register long r4 asm ("%r4") = (long)(arg1); \ - register long r5 asm ("%r5") = (long)(arg2) + long _arg1 = (long) (arg1); \ + long _arg2 = (long) (arg2); \ + register long r4 asm ("%r4") = (long)(_arg1); \ + register long r5 asm ("%r5") = (long)(_arg2) #define SUBSTITUTE_ARGS_3(arg1, arg2, arg3) \ - register long r4 asm ("%r4") = (long)(arg1); \ - register long r5 asm ("%r5") = (long)(arg2); \ - register long r6 asm ("%r6") = (long)(arg3) + long _arg1 = (long) (arg1); \ + long _arg2 = (long) (arg2); \ + long _arg3 = (long) (arg3); \ + register long r4 asm ("%r4") = (long)(_arg1); \ + register long r5 asm ("%r5") = (long)(_arg2); \ + register long r6 asm ("%r6") = (long)(_arg3) #define SUBSTITUTE_ARGS_4(arg1, arg2, arg3, arg4) \ - register long r4 asm ("%r4") = (long)(arg1); \ - register long r5 asm ("%r5") = (long)(arg2); \ - register long r6 asm ("%r6") = (long)(arg3); \ - register long r7 asm ("%r7") = (long)(arg4) + long _arg1 = (long) (arg1); \ + long _arg2 = (long) (arg2); \ + long _arg3 = (long) (arg3); \ + long _arg4 = (long) (arg4); \ + register long r4 asm ("%r4") = (long)(_arg1); \ + register long r5 asm ("%r5") = (long)(_arg2); \ + register long r6 asm ("%r6") = (long)(_arg3); \ + register long r7 asm ("%r7") = (long)(_arg4) #define SUBSTITUTE_ARGS_5(arg1, arg2, arg3, arg4, arg5) \ - register long r4 asm ("%r4") = (long)(arg1); \ - register long r5 asm ("%r5") = (long)(arg2); \ - register long r6 asm ("%r6") = (long)(arg3); \ - register long r7 asm ("%r7") = (long)(arg4); \ - register long r0 asm ("%r0") = (long)(arg5) + long _arg1 = (long) (arg1); \ + long _arg2 = (long) (arg2); \ + long _arg3 = (long) (arg3); \ + long _arg4 = (long) (arg4); \ + long _arg5 = (long) (arg5); \ + register long r4 asm ("%r4") = (long)(_arg1); \ + register long r5 asm ("%r5") = (long)(_arg2); \ + register long r6 asm ("%r6") = (long)(_arg3); \ + register long r7 asm ("%r7") = (long)(_arg4); \ + register long r0 asm ("%r0") = (long)(_arg5) #define SUBSTITUTE_ARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ - register long r4 asm ("%r4") = (long)(arg1); \ - register long r5 asm ("%r5") = (long)(arg2); \ - register long r6 asm ("%r6") = (long)(arg3); \ - register long r7 asm ("%r7") = (long)(arg4); \ - register long r0 asm ("%r0") = (long)(arg5); \ - register long r1 asm ("%r1") = (long)(arg6) + long _arg1 = (long) (arg1); \ + long _arg2 = (long) (arg2); \ + long _arg3 = (long) (arg3); \ + long _arg4 = (long) (arg4); \ + long _arg5 = (long) (arg5); \ + long _arg6 = (long) (arg6); \ + register long r4 asm ("%r4") = (long)(_arg1); \ + register long r5 asm ("%r5") = (long)(_arg2); \ + register long r6 asm ("%r6") = (long)(_arg3); \ + register long r7 asm ("%r7") = (long)(_arg4); \ + register long r0 asm ("%r0") = (long)(_arg5); \ + register long r1 asm ("%r1") = (long)(_arg6) #define SUBSTITUTE_ARGS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ - register long r4 asm ("%r4") = (long)(arg1); \ - register long r5 asm ("%r5") = (long)(arg2); \ - register long r6 asm ("%r6") = (long)(arg3); \ - register long r7 asm ("%r7") = (long)(arg4); \ - register long r0 asm ("%r0") = (long)(arg5) \ - register long r1 asm ("%r1") = (long)(arg6); \ - register long r2 asm ("%r2") = (long)(arg7) + long _arg1 = (long) (arg1); \ + long _arg2 = (long) (arg2); \ + long _arg3 = (long) (arg3); \ + long _arg4 = (long) (arg4); \ + long _arg5 = (long) (arg5); \ + long _arg6 = (long) (arg6); \ + long _arg7 = (long) (arg7); \ + register long r4 asm ("%r4") = (long)(_arg1); \ + register long r5 asm ("%r5") = (long)(_arg2); \ + register long r6 asm ("%r6") = (long)(_arg3); \ + register long r7 asm ("%r7") = (long)(_arg4); \ + register long r0 asm ("%r0") = (long)(_arg5); \ + register long r1 asm ("%r1") = (long)(_arg6); \ + register long r2 asm ("%r2") = (long)(_arg7) #undef INLINE_SYSCALL #define INLINE_SYSCALL(name, nr, args...) \