Subject: re: Crash in current
To: Robert Swindells <rjs@fdy2.demon.co.uk>
From: matthew green <mrg@eterna.com.au>
List: port-sparc
Date: 12/22/2007 14:01:35
AFAICT NetBSD/sparc SUN4U kernels are using the sparc atomic ops not
the sparc64 ones.
please try this patch. i have compiled but not run GENERIC_SUN4U
with this patch.
thanks,
.mrg.
Index: sparc/atomic/Makefile.inc
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc/atomic/Makefile.inc,v
retrieving revision 1.3
diff -p -r1.3 Makefile.inc
*** sparc/atomic/Makefile.inc 29 Nov 2007 15:29:46 -0000 1.3
--- sparc/atomic/Makefile.inc 22 Dec 2007 03:03:41 -0000
***************
*** 1,6 ****
# $NetBSD: Makefile.inc,v 1.3 2007/11/29 15:29:46 ad Exp $
! .if defined(LIB) && (${LIB} == "kern")
SRCS+= atomic_add_32_cas.c atomic_add_32_nv_cas.c atomic_and_32_cas.c \
atomic_and_32_nv_cas.c atomic_dec_32_cas.c atomic_dec_32_nv_cas.c \
--- 1,16 ----
# $NetBSD: Makefile.inc,v 1.3 2007/11/29 15:29:46 ad Exp $
! .include <bsd.own.mk>
!
! .if ${MACHINE} == "sparc64"
!
! SPARC64DIR= ${.PARSEDIR}/../../sparc64/atomic
! .PATH: ${SPARC64DIR}
!
! .include "${SPARC64DIR}/Makefile.inc"
!
! .else
! . if defined(LIB) && (${LIB} == "kern")
SRCS+= atomic_add_32_cas.c atomic_add_32_nv_cas.c atomic_and_32_cas.c \
atomic_and_32_nv_cas.c atomic_dec_32_cas.c atomic_dec_32_nv_cas.c \
*************** SRCS+= atomic_add_32_cas.c atomic_add_32
*** 8,11 ****
--- 18,23 ----
atomic_or_32_nv_cas.c atomic_swap_32_cas.c \
atomic_cas.S membar_ops.S
+ . endif
+
.endif
Index: sparc/atomic/atomic_op_asm.h
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc/atomic/atomic_op_asm.h,v
retrieving revision 1.2
diff -p -r1.2 atomic_op_asm.h
*** sparc/atomic/atomic_op_asm.h 29 Nov 2007 02:01:22 -0000 1.2
--- sparc/atomic/atomic_op_asm.h 22 Dec 2007 03:03:41 -0000
***************
*** 1,4 ****
! /* $NetBSD: atomic_op_asm.h,v 1.2 2007/11/29 02:01:22 ad Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
--- 1,4 ----
! /* $NetBSD: atomic_op_asm.h,v 1.2 2007/11/28 17:29:32 ad Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
***************
*** 43,54 ****
#if defined(_KERNEL)
! #define ATOMIC_OP_ALIAS(a,s) STRONG_ALIAS(a,s)
#else /* _KERNEL */
! #define ATOMIC_OP_ALIAS(a,s) WEAK_ALIAS(a,s)
#endif /* _KERNEL */
#endif /* _ATOMIC_OP_ASM_H_ */
--- 43,72 ----
#if defined(_KERNEL)
! #define ATOMIC_OP_ALIAS(a,s) STRONG_ALIAS(a,s)
!
! #ifdef __sparc64__
! #define ATOMIC_OP_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s/**/_64)
! #else
! #define ATOMIC_OP_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s/**/_32)
! #endif
#else /* _KERNEL */
! #define ATOMIC_OP_ALIAS(a,s) WEAK_ALIAS(a,s)
!
! #ifdef __sparc64__
! #define ATOMIC_OP_ALIAS_SIZE(a,s) WEAK_ALIAS(a,s/**/_64)
! #else
! #define ATOMIC_OP_ALIAS_SIZE(a,s) WEAK_ALIAS(a,s##_32)
! #endif
#endif /* _KERNEL */
+ #ifdef __sparc64__
+ #define STRONG_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s##_64)
+ #else
+ #define STRONG_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s##_32)
+ #endif
+
#endif /* _ATOMIC_OP_ASM_H_ */
Index: sparc64/atomic/atomic_add.S
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_add.S,v
retrieving revision 1.2
diff -p -r1.2 atomic_add.S
*** sparc64/atomic/atomic_add.S 28 Nov 2007 17:29:31 -0000 1.2
--- sparc64/atomic/atomic_add.S 22 Dec 2007 03:03:41 -0000
*************** ENTRY_NOPROFILE(_atomic_add_64)
*** 68,81 ****
retl
add %o1, %o2, %o0
ATOMIC_OP_ALIAS(atomic_add_64,_atomic_add_64)
- ATOMIC_OP_ALIAS(atomic_add_long,_atomic_add_64)
- STRONG_ALIAS(_atomic_add_long,_atomic_add_64)
- ATOMIC_OP_ALIAS(atomic_add_ptr,_atomic_add_64)
- STRONG_ALIAS(_atomic_add_ptr,_atomic_add_64)
ATOMIC_OP_ALIAS(atomic_add_64_nv,_atomic_add_64)
STRONG_ALIAS(_atomic_add_64_nv,_atomic_add_64)
! ATOMIC_OP_ALIAS(atomic_add_long_nv,_atomic_add_64)
! STRONG_ALIAS(_atomic_add_long_nv,_atomic_add_64)
! ATOMIC_OP_ALIAS(atomic_add_ptr_nv,_atomic_add_64)
! STRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_64)
--- 68,83 ----
retl
add %o1, %o2, %o0
ATOMIC_OP_ALIAS(atomic_add_64,_atomic_add_64)
ATOMIC_OP_ALIAS(atomic_add_64_nv,_atomic_add_64)
STRONG_ALIAS(_atomic_add_64_nv,_atomic_add_64)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_add_long,_atomic_add)
! STRONG_ALIAS_SIZE(_atomic_add_long,_atomic_add)
! ATOMIC_OP_ALIAS_SIZE(atomic_add_ptr,_atomic_add)
! STRONG_ALIAS_SIZE(_atomic_add_ptr,_atomic_add)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_add_long_nv,_atomic_add)
! STRONG_ALIAS_SIZE(_atomic_add_long_nv,_atomic_add)
! ATOMIC_OP_ALIAS_SIZE(atomic_add_ptr_nv,_atomic_add)
! STRONG_ALIAS_SIZE(_atomic_add_ptr_nv,_atomic_add)
Index: sparc64/atomic/atomic_and.S
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_and.S,v
retrieving revision 1.2
diff -p -r1.2 atomic_and.S
*** sparc64/atomic/atomic_and.S 28 Nov 2007 17:29:32 -0000 1.2
--- sparc64/atomic/atomic_and.S 22 Dec 2007 03:03:41 -0000
*************** ENTRY_NOPROFILE(_atomic_and_64)
*** 68,77 ****
retl
and %o1, %o2, %o0
ATOMIC_OP_ALIAS(atomic_and_64,_atomic_and_64)
- ATOMIC_OP_ALIAS(atomic_and_ulong,_atomic_and_64)
- STRONG_ALIAS(_atomic_and_ulong,_atomic_and_64)
ATOMIC_OP_ALIAS(atomic_and_64_nv,_atomic_and_64)
STRONG_ALIAS(_atomic_and_64_nv,_atomic_and_64)
! ATOMIC_OP_ALIAS(atomic_and_ulong_nv,_atomic_and_64)
! STRONG_ALIAS(_atomic_and_ulong_nv,_atomic_and_64)
--- 68,79 ----
retl
and %o1, %o2, %o0
ATOMIC_OP_ALIAS(atomic_and_64,_atomic_and_64)
ATOMIC_OP_ALIAS(atomic_and_64_nv,_atomic_and_64)
STRONG_ALIAS(_atomic_and_64_nv,_atomic_and_64)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_and_ulong,_atomic_and)
! STRONG_ALIAS_SIZE(_atomic_and_ulong,_atomic_and)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_and_ulong_nv,_atomic_and)
! STRONG_ALIAS_SIZE(_atomic_and_ulong_nv,_atomic_and)
Index: sparc64/atomic/atomic_cas.S
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_cas.S,v
retrieving revision 1.2
diff -p -r1.2 atomic_cas.S
*** sparc64/atomic/atomic_cas.S 28 Nov 2007 17:29:32 -0000 1.2
--- sparc64/atomic/atomic_cas.S 22 Dec 2007 03:03:41 -0000
*************** ENTRY_NOPROFILE(_atomic_cas_64)
*** 53,59 ****
retl
mov %o2, %o0
ATOMIC_OP_ALIAS(atomic_cas_64,_atomic_cas_64)
! ATOMIC_OP_ALIAS(atomic_cas_ulong,_atomic_cas_64)
! STRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_64)
! ATOMIC_OP_ALIAS(atomic_cas_ptr,_atomic_cas_64)
! STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_64)
--- 53,60 ----
retl
mov %o2, %o0
ATOMIC_OP_ALIAS(atomic_cas_64,_atomic_cas_64)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_cas_ulong,_atomic_cas)
! STRONG_ALIAS_SIZE(_atomic_cas_ulong,_atomic_cas)
! ATOMIC_OP_ALIAS_SIZE(atomic_cas_ptr,_atomic_cas)
! STRONG_ALIAS_SIZE(_atomic_cas_ptr,_atomic_cas)
Index: sparc64/atomic/atomic_dec.S
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_dec.S,v
retrieving revision 1.3
diff -p -r1.3 atomic_dec.S
*** sparc64/atomic/atomic_dec.S 30 Nov 2007 17:11:48 -0000 1.3
--- sparc64/atomic/atomic_dec.S 22 Dec 2007 03:03:41 -0000
*************** ENTRY_NOPROFILE(_atomic_dec_64)
*** 68,81 ****
retl
add %o2, -1, %o0
ATOMIC_OP_ALIAS(atomic_dec_64,_atomic_dec_64)
- ATOMIC_OP_ALIAS(atomic_dec_ulong,_atomic_dec_64)
- STRONG_ALIAS(_atomic_dec_ulong,_atomic_dec_64)
- ATOMIC_OP_ALIAS(atomic_dec_ptr,_atomic_dec_64)
- STRONG_ALIAS(_atomic_dec_ptr,_atomic_dec_64)
ATOMIC_OP_ALIAS(atomic_dec_64_nv,_atomic_dec_64)
STRONG_ALIAS(_atomic_dec_64_nv,_atomic_dec_64)
! ATOMIC_OP_ALIAS(atomic_dec_ulong_nv,_atomic_dec_64)
! STRONG_ALIAS(_atomic_dec_ulong_nv,_atomic_dec_64)
! ATOMIC_OP_ALIAS(atomic_dec_ptr_nv,_atomic_dec_64)
! STRONG_ALIAS(_atomic_dec_ptr_nv,_atomic_dec_64)
--- 68,83 ----
retl
add %o2, -1, %o0
ATOMIC_OP_ALIAS(atomic_dec_64,_atomic_dec_64)
ATOMIC_OP_ALIAS(atomic_dec_64_nv,_atomic_dec_64)
STRONG_ALIAS(_atomic_dec_64_nv,_atomic_dec_64)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_dec_ulong,_atomic_dec)
! STRONG_ALIAS_SIZE(_atomic_dec_ulong,_atomic_dec)
! ATOMIC_OP_ALIAS_SIZE(atomic_dec_ptr,_atomic_dec)
! STRONG_ALIAS_SIZE(_atomic_dec_ptr,_atomic_dec)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_dec_ulong_nv,_atomic_dec)
! STRONG_ALIAS_SIZE(_atomic_dec_ulong_nv,_atomic_dec)
! ATOMIC_OP_ALIAS_SIZE(atomic_dec_ptr_nv,_atomic_dec)
! STRONG_ALIAS_SIZE(_atomic_dec_ptr_nv,_atomic_dec)
Index: sparc64/atomic/atomic_inc.S
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_inc.S,v
retrieving revision 1.2
diff -p -r1.2 atomic_inc.S
*** sparc64/atomic/atomic_inc.S 28 Nov 2007 17:29:32 -0000 1.2
--- sparc64/atomic/atomic_inc.S 22 Dec 2007 03:03:41 -0000
*************** ENTRY_NOPROFILE(_atomic_inc_64)
*** 68,81 ****
retl
add %o2, 1, %o0
ATOMIC_OP_ALIAS(atomic_inc_64,_atomic_inc_64)
- ATOMIC_OP_ALIAS(atomic_inc_ulong,_atomic_inc_64)
- STRONG_ALIAS(_atomic_inc_ulong,_atomic_inc_64)
- ATOMIC_OP_ALIAS(atomic_inc_ptr,_atomic_inc_64)
- STRONG_ALIAS(_atomic_inc_ptr,_atomic_inc_64)
ATOMIC_OP_ALIAS(atomic_inc_64_nv,_atomic_inc_64)
STRONG_ALIAS(_atomic_inc_64_nv,_atomic_inc_64)
! ATOMIC_OP_ALIAS(atomic_inc_ulong_nv,_atomic_inc_64)
! STRONG_ALIAS(_atomic_inc_ulong_nv,_atomic_inc_64)
! ATOMIC_OP_ALIAS(atomic_inc_ptr_nv,_atomic_inc_64)
! STRONG_ALIAS(_atomic_inc_ptr_nv,_atomic_inc_64)
--- 68,83 ----
retl
add %o2, 1, %o0
ATOMIC_OP_ALIAS(atomic_inc_64,_atomic_inc_64)
ATOMIC_OP_ALIAS(atomic_inc_64_nv,_atomic_inc_64)
STRONG_ALIAS(_atomic_inc_64_nv,_atomic_inc_64)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_inc_ulong,_atomic_inc)
! STRONG_ALIAS_SIZE(_atomic_inc_ulong,_atomic_inc)
! ATOMIC_OP_ALIAS_SIZE(atomic_inc_ptr,_atomic_inc)
! STRONG_ALIAS_SIZE(_atomic_inc_ptr,_atomic_inc)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_inc_ulong_nv,_atomic_inc)
! STRONG_ALIAS_SIZE(_atomic_inc_ulong_nv,_atomic_inc)
! ATOMIC_OP_ALIAS_SIZE(atomic_inc_ptr_nv,_atomic_inc)
! STRONG_ALIAS_SIZE(_atomic_inc_ptr_nv,_atomic_inc)
Index: sparc64/atomic/atomic_op_asm.h
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_op_asm.h,v
retrieving revision 1.2
diff -p -r1.2 atomic_op_asm.h
*** sparc64/atomic/atomic_op_asm.h 28 Nov 2007 17:29:32 -0000 1.2
--- sparc64/atomic/atomic_op_asm.h 22 Dec 2007 03:03:41 -0000
***************
*** 43,54 ****
#if defined(_KERNEL)
! #define ATOMIC_OP_ALIAS(a,s) STRONG_ALIAS(a,s)
#else /* _KERNEL */
! #define ATOMIC_OP_ALIAS(a,s) WEAK_ALIAS(a,s)
#endif /* _KERNEL */
#endif /* _ATOMIC_OP_ASM_H_ */
--- 43,72 ----
#if defined(_KERNEL)
! #define ATOMIC_OP_ALIAS(a,s) STRONG_ALIAS(a,s)
!
! #ifdef __sparc64__
! #define ATOMIC_OP_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s/**/_64)
! #else
! #define ATOMIC_OP_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s/**/_32)
! #endif
#else /* _KERNEL */
! #define ATOMIC_OP_ALIAS(a,s) WEAK_ALIAS(a,s)
!
! #ifdef __sparc64__
! #define ATOMIC_OP_ALIAS_SIZE(a,s) WEAK_ALIAS(a,s/**/_64)
! #else
! #define ATOMIC_OP_ALIAS_SIZE(a,s) WEAK_ALIAS(a,s##_32)
! #endif
#endif /* _KERNEL */
+ #ifdef __sparc64__
+ #define STRONG_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s##_64)
+ #else
+ #define STRONG_ALIAS_SIZE(a,s) STRONG_ALIAS(a,s##_32)
+ #endif
+
#endif /* _ATOMIC_OP_ASM_H_ */
Index: sparc64/atomic/atomic_or.S
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_or.S,v
retrieving revision 1.2
diff -p -r1.2 atomic_or.S
*** sparc64/atomic/atomic_or.S 28 Nov 2007 17:29:33 -0000 1.2
--- sparc64/atomic/atomic_or.S 22 Dec 2007 03:03:41 -0000
*************** ENTRY_NOPROFILE(_atomic_or_64)
*** 68,77 ****
retl
or %o1, %o2, %o0
ATOMIC_OP_ALIAS(atomic_or_64,_atomic_or_64)
- ATOMIC_OP_ALIAS(atomic_or_ulong,_atomic_or_64)
- STRONG_ALIAS(_atomic_or_ulong,_atomic_or_64)
ATOMIC_OP_ALIAS(atomic_or_64_nv,_atomic_or_64)
STRONG_ALIAS(_atomic_or_64_nv,_atomic_or_64)
! ATOMIC_OP_ALIAS(atomic_or_ulong_nv,_atomic_or_64)
! STRONG_ALIAS(_atomic_or_ulong_nv,_atomic_or_64)
--- 68,79 ----
retl
or %o1, %o2, %o0
ATOMIC_OP_ALIAS(atomic_or_64,_atomic_or_64)
ATOMIC_OP_ALIAS(atomic_or_64_nv,_atomic_or_64)
STRONG_ALIAS(_atomic_or_64_nv,_atomic_or_64)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_or_ulong,_atomic_or)
! STRONG_ALIAS(_atomic_or_ulong,_atomic_or)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_or_ulong_nv,_atomic_or)
! STRONG_ALIAS_SIZE(_atomic_or_ulong_nv,_atomic_or)
Index: sparc64/atomic/atomic_swap.S
===================================================================
RCS file: /cvsroot/src/common/lib/libc/arch/sparc64/atomic/atomic_swap.S,v
retrieving revision 1.2
diff -p -r1.2 atomic_swap.S
*** sparc64/atomic/atomic_swap.S 28 Nov 2007 17:29:33 -0000 1.2
--- sparc64/atomic/atomic_swap.S 22 Dec 2007 03:03:41 -0000
*************** ENTRY_NOPROFILE(_atomic_swap_64)
*** 63,69 ****
retl
mov %o3, %o0
ATOMIC_OP_ALIAS(atomic_swap_64,_atomic_swap_64)
! ATOMIC_OP_ALIAS(atomic_swap_ulong,_atomic_swap_64)
! STRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_64)
! ATOMIC_OP_ALIAS(atomic_swap_ptr,_atomic_swap_64)
! STRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_64)
--- 63,70 ----
retl
mov %o3, %o0
ATOMIC_OP_ALIAS(atomic_swap_64,_atomic_swap_64)
!
! ATOMIC_OP_ALIAS_SIZE(atomic_swap_ulong,_atomic_swap)
! STRONG_ALIAS_SIZE(_atomic_swap_ulong,_atomic_swap)
! ATOMIC_OP_ALIAS_SIZE(atomic_swap_ptr,_atomic_swap)
! STRONG_ALIAS_SIZE(_atomic_swap_ptr,_atomic_swap)