I am not an inline assembler guru, but here is the patch I think get the
job done. If I understannd things correcly, GCC accepts matching
constraints only for parameters for which registers are allowed.
Any constructive critique is appreciated.
> Don't supose you are bored enough to tweak the asm statements to make
> things happy? :-)
--
Alexander Kabaev
Index: i386/lockdflt.c
===================================================================
RCS file: /usr/ncvs/src/libexec/rtld-elf/i386/lockdflt.c,v
retrieving revision 1.6
diff -u -r1.6 lockdflt.c
--- i386/lockdflt.c 17 Jul 2000 17:18:13 -0000 1.6
+++ i386/lockdflt.c 24 Jun 2002 21:35:35 -0000
@@ -81,7 +81,7 @@
__asm __volatile ("lock; cmpxchgl %2, %0"
: "=m"(*m), "=a"(result)
- : "r"(new), "0"(*m), "1"(old)
+ : "r"(new), "m"(*m), "1"(old)
: "cc");
return result;
@@ -94,7 +94,7 @@
__asm __volatile ("xchgl %0, %1"
: "=r"(result), "=m"(*m)
- : "0"(v), "1"(*m));
+ : "0"(v), "m"(*m));
return result;
}
Index: i386/rtld_machdep.h
===================================================================
RCS file: /usr/ncvs/src/libexec/rtld-elf/i386/rtld_machdep.h,v
retrieving revision 1.6
diff -u -r1.6 rtld_machdep.h
--- i386/rtld_machdep.h 29 Oct 2001 10:10:10 -0000 1.6
+++ i386/rtld_machdep.h 24 Jun 2002 19:24:04 -0000
@@ -55,13 +55,13 @@
static inline void
atomic_decr_int(volatile int *p)
{
- __asm __volatile ("lock; decl %0" : "=m"(*p) : "0"(*p) : "cc");
+ __asm __volatile ("lock; decl %0" : "=m"(*p) : "m"(*p) : "cc");
}
static inline void
atomic_incr_int(volatile int *p)
{
- __asm __volatile ("lock; incl %0" : "=m"(*p) : "0"(*p) : "cc");
+ __asm __volatile ("lock; incl %0" : "=m"(*p) : "m"(*p) : "cc");
}
static inline void
@@ -69,7 +69,7 @@
{
__asm __volatile ("lock; addl %1, %0"
: "=m"(*p)
- : "ri"(val), "0"(*p)
+ : "ri"(val), "m"(*p)
: "cc");
}
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message