* [PATCH] Fix sparcv9-linux build
@ 2002-09-29 4:29 Jakub Jelinek
2002-09-29 4:32 ` Roland McGrath
0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2002-09-29 4:29 UTC (permalink / raw)
To: Ulrich Drepper, Roland McGrath; +Cc: Glibc hackers
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
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] Fix sparcv9-linux build
2002-09-29 4:29 [PATCH] Fix sparcv9-linux build Jakub Jelinek
@ 2002-09-29 4:32 ` Roland McGrath
0 siblings, 0 replies; 2+ messages in thread
From: Roland McGrath @ 2002-09-29 4:32 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: Ulrich Drepper, Glibc hackers
Thanks, I've put it in.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2002-09-29 11:32 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-09-29 4:29 [PATCH] Fix sparcv9-linux build Jakub Jelinek
2002-09-29 4:32 ` Roland McGrath
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).