public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@redhat.com>
To: Ulrich Drepper <drepper@redhat.com>, Roland McGrath <roland@redhat.com>
Cc: Glibc hackers <libc-hacker@sources.redhat.com>
Subject: [PATCH] Fix sparcv9-linux build
Date: Sun, 29 Sep 2002 04:29:00 -0000	[thread overview]
Message-ID: <20020929132935.G3451@sunsite.ms.mff.cuni.cz> (raw)

Hi!

With the recent _exit.c changes I get SIGBUS whenever a program exits (ie.
already rpcgen breaks out).
The problem is that gcc optimized __GI__exit into:
	illtrap  0xf00
	b  %xcc, 0 <__GI__exit+0x0>
The reason is that sparc INLINE_SYSCALL macros weren't using
volatile asm and thus when not looking at return value it was optimized out.
Fix below, powerpc{32,64} apparently has the same problem, so I've changed
that too. Other arches apparently do use __asm __volatile.

2002-09-29  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/unix/sysv/linux/sparc/sysdep.h (inline_syscall0): Make asm
	volatile.
	(inline_syscall1, inline_syscall2, inline_syscall3, inline_syscall4,
	inline_syscall5, inline_syscall6): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h (INLINE_SYSCALL):
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h (INLINE_SYSCALL):
	Likewise.

--- libc/sysdeps/unix/sysv/linux/sparc/sysdep.h.jj	2001-08-23 18:51:33.000000000 +0200
+++ libc/sysdeps/unix/sysv/linux/sparc/sysdep.h	2002-09-29 13:21:44.000000000 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2000.
 
@@ -27,9 +27,9 @@
 ({									\
 	register long __o0 __asm__ ("o0");				\
 	register long __g1 __asm__ ("g1") = __NR_##name;		\
-	__asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :		\
-		 "0" (__g1) :						\
-		 __SYSCALL_CLOBBERS);					\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1) :					\
+			  __SYSCALL_CLOBBERS);				\
 	__o0;								\
 })
 
@@ -37,9 +37,9 @@
 ({									\
 	register long __o0 __asm__ ("o0") = (long)(arg1);		\
 	register long __g1 __asm__ ("g1") = __NR_##name;		\
-	__asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :		\
-		 "0" (__g1), "1" (__o0) :				\
-		 __SYSCALL_CLOBBERS);					\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0) :			\
+			  __SYSCALL_CLOBBERS);				\
 	__o0;								\
 })
 
@@ -48,9 +48,9 @@
 	register long __o0 __asm__ ("o0") = (long)(arg1);		\
 	register long __o1 __asm__ ("o1") = (long)(arg2);		\
 	register long __g1 __asm__ ("g1") = __NR_##name;		\
-	__asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :		\
-		 "0" (__g1), "1" (__o0), "r" (__o1) :			\
-		 __SYSCALL_CLOBBERS);					\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1) :		\
+			  __SYSCALL_CLOBBERS);				\
 	__o0;								\
 })
 
@@ -60,9 +60,10 @@
 	register long __o1 __asm__ ("o1") = (long)(arg2);		\
 	register long __o2 __asm__ ("o2") = (long)(arg3);		\
 	register long __g1 __asm__ ("g1") = __NR_##name;		\
-	__asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :		\
-		 "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2) :	\
-		 __SYSCALL_CLOBBERS);					\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2) :					\
+			  __SYSCALL_CLOBBERS);				\
 	__o0;								\
 })
 
@@ -73,10 +74,10 @@
 	register long __o2 __asm__ ("o2") = (long)(arg3);		\
 	register long __o3 __asm__ ("o3") = (long)(arg4);		\
 	register long __g1 __asm__ ("g1") = __NR_##name;		\
-	__asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :		\
-		 "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2),	\
-		 "r" (__o3) :						\
-		 __SYSCALL_CLOBBERS);					\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2), "r" (__o3) :			\
+			  __SYSCALL_CLOBBERS);				\
 	__o0;								\
 })
 
@@ -88,10 +89,10 @@
 	register long __o3 __asm__ ("o3") = (long)(arg4);		\
 	register long __o4 __asm__ ("o4") = (long)(arg5);		\
 	register long __g1 __asm__ ("g1") = __NR_##name;		\
-	__asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :		\
-		 "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2),	\
-		 "r" (__o3), "r" (__o4) :				\
-		 __SYSCALL_CLOBBERS);					\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2), "r" (__o3), "r" (__o4) :		\
+			  __SYSCALL_CLOBBERS);				\
 	__o0;								\
 })
 
@@ -104,10 +105,11 @@
 	register long __o4 __asm__ ("o4") = (long)(arg5);		\
 	register long __o5 __asm__ ("o5") = (long)(arg6);		\
 	register long __g1 __asm__ ("g1") = __NR_##name;		\
-	__asm__ (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :		\
-		 "0" (__g1), "1" (__o0), "r" (__o1), "r" (__o2),	\
-		 "r" (__o3), "r" (__o4), "r" (__o5) :			\
-		 __SYSCALL_CLOBBERS);					\
+	__asm __volatile (__SYSCALL_STRING : "=r" (__g1), "=r" (__o0) :	\
+			  "0" (__g1), "1" (__o0), "r" (__o1),		\
+			  "r" (__o2), "r" (__o3), "r" (__o4),		\
+			  "r" (__o5) :					\
+			  __SYSCALL_CLOBBERS);				\
 	__o0;								\
 })
 
--- libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h.jj	2002-09-18 00:31:46.000000000 +0200
+++ libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h	2002-09-29 13:23:30.000000000 +0200
@@ -41,11 +41,11 @@
   ({						\
     long ret, err;				\
     LOADARGS_##nr(name, args);			\
-    __asm__ ("sc\n\t"				\
-	     "mfcr	%1\n\t"			\
-	     : "=r" (r3), "=r" (err)		\
-	     : ASM_INPUT_##nr			\
-	     : "cc", "memory");			\
+    __asm __volatile ("sc\n\t"			\
+		      "mfcr	%1\n\t"		\
+		      : "=r" (r3), "=r" (err)	\
+		      : ASM_INPUT_##nr		\
+		      : "cc", "memory");	\
     ret = r3;					\
     if (err & 1 << 28)				\
       {						\
--- libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h.jj	2002-09-18 01:50:03.000000000 +0200
+++ libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h	2002-09-29 13:25:17.000000000 +0200
@@ -57,11 +57,11 @@
     DECLARGS_##nr;				\
     long ret, err;				\
     LOADARGS_##nr(name, args);			\
-    __asm__ ("sc\n\t"				\
-	     "mfcr	%1\n\t"			\
-	     : "=r" (r3), "=r" (err)		\
-	     : ASM_INPUT_##nr			\
-	     : "cc", "memory");			\
+    __asm __volatile ("sc\n\t"			\
+		      "mfcr	%1\n\t"		\
+		      : "=r" (r3), "=r" (err)	\
+		      : ASM_INPUT_##nr		\
+		      : "cc", "memory");	\
     ret = r3;					\
     if (err & 1 << 28)				\
       {						\
@@ -123,18 +123,20 @@
     register long r8 __asm__ ("r8");				\
     long ret, err;						\
     LOADARGS_##nr(name, args);					\
-    __asm__ ("sc\n\t"						\
-	     "mfcr	%7\n\t"					\
-	     : "=r" (r0), "=r" (r3), "=r" (r4), "=r" (r5),	\
-	       "=r" (r6), "=r" (r7), "=r" (r8), "=r" (err)	\
-	     : ASM_INPUT_##nr					\
-	     : "r9", "r10", "r11", "r12",			\
-	       "fr0", "fr1", "fr2", "fr3",			\
-	       "fr4", "fr5", "fr6", "fr7",			\
-	       "fr8", "fr9", "fr10", "fr11",			\
-	       "fr12", "fr13",					\
-	       "ctr", "lr",					\
-	       "cr0", "cr1", "cr5", "cr6", "cr7", "memory");	\
+    __asm __volatile ("sc\n\t"					\
+		      "mfcr	%7\n\t"				\
+		      : "=r" (r0), "=r" (r3), "=r" (r4),	\
+		        "=r" (r5), "=r" (r6), "=r" (r7),	\
+		        "=r" (r8), "=r" (err)			\
+		      : ASM_INPUT_##nr				\
+		      : "r9", "r10", "r11", "r12",		\
+		        "fr0", "fr1", "fr2", "fr3",		\
+			"fr4", "fr5", "fr6", "fr7",		\
+			"fr8", "fr9", "fr10", "fr11",		\
+			"fr12", "fr13",				\
+			"ctr", "lr",				\
+			"cr0", "cr1", "cr5", "cr6", "cr7",	\
+			"memory");				\
     ret = r3;							\
     if (err & 1 << 28)						\
       {								\

	Jakub

             reply	other threads:[~2002-09-29 11:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-29  4:29 Jakub Jelinek [this message]
2002-09-29  4:32 ` Roland McGrath

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20020929132935.G3451@sunsite.ms.mff.cuni.cz \
    --to=jakub@redhat.com \
    --cc=drepper@redhat.com \
    --cc=libc-hacker@sources.redhat.com \
    --cc=roland@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).