From c9394f466a1df1f7435a8336cf8e88516efdb21c Mon Sep 17 00:00:00 2001 From: phx <phx@NetBSD.org> Date: Sat, 3 Oct 2009 22:28:33 +0000 Subject: [PATCH] SystemV-R4 ABI for M68k returns pointers in %a0, so we have to make sure that CERROR returns -1 in %a0 in addition to %d0 and %d1, to make functions like mmap(2), mremap(2), shmat(2) or sbrk(2) return -1 in case of an error. A side effect of this bug was a segfault caused by jemalloc, when mmap() failed. --- lib/libc/arch/m68k/sys/cerror.S | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/libc/arch/m68k/sys/cerror.S b/lib/libc/arch/m68k/sys/cerror.S index 5db55806b6b4..40d2be20434d 100644 --- a/lib/libc/arch/m68k/sys/cerror.S +++ b/lib/libc/arch/m68k/sys/cerror.S @@ -1,4 +1,4 @@ -/* $NetBSD: cerror.S,v 1.14 2003/08/07 16:42:14 agc Exp $ */ +/* $NetBSD: cerror.S,v 1.15 2009/10/03 22:28:33 phx Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -39,7 +39,7 @@ #if 0 RCSID("from: @(#)cerror.s 5.1 (Berkeley) 5/12/90") #else - RCSID("$NetBSD: cerror.S,v 1.14 2003/08/07 16:42:14 agc Exp $") + RCSID("$NetBSD: cerror.S,v 1.15 2009/10/03 22:28:33 phx Exp $") #endif #endif /* LIBC_SCCS and not lint */ @@ -80,4 +80,7 @@ _ENTRY(CERROR) #endif /* _REENTRANT */ movl #-1,%d0 movl #-1,%d1 +#ifdef __SVR4_ABI__ + movl %d0,%a0 +#endif rts