svn commit: r350826 - in head/lib/libthr/arch/powerpc: . include powerpc

Brandon Bergren bdragon at FreeBSD.org
Fri Aug 9 20:16:39 UTC 2019


Author: bdragon
Date: Fri Aug  9 20:16:38 2019
New Revision: 350826
URL: https://svnweb.freebsd.org/changeset/base/350826

Log:
  Implement _umtx_op_err.S on powerpc / powerpc64.
  
  As per r177853, we need to avoid using errno inside user mutex code, since
   signal handlers can interfere with it and mess up libthr internal state.
  
  So, implement _umtx_op_err() instead, which makes a raw syscall and
  returns the error value directly instead of using errno.
  
  Approved by: jhibbits (mentor)
  Differential Revision: https://reviews.freebsd.org/D20946

Added:
  head/lib/libthr/arch/powerpc/Makefile.inc   (contents, props changed)
  head/lib/libthr/arch/powerpc/powerpc/
  head/lib/libthr/arch/powerpc/powerpc/_umtx_op_err.S   (contents, props changed)
Modified:
  head/lib/libthr/arch/powerpc/include/pthread_md.h

Added: head/lib/libthr/arch/powerpc/Makefile.inc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libthr/arch/powerpc/Makefile.inc	Fri Aug  9 20:16:38 2019	(r350826)
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+SRCS+=  _umtx_op_err.S

Modified: head/lib/libthr/arch/powerpc/include/pthread_md.h
==============================================================================
--- head/lib/libthr/arch/powerpc/include/pthread_md.h	Fri Aug  9 19:09:05 2019	(r350825)
+++ head/lib/libthr/arch/powerpc/include/pthread_md.h	Fri Aug  9 20:16:38 2019	(r350826)
@@ -91,4 +91,6 @@ _get_curthread(void)
 	return (NULL);
 }
 
+#define	HAS__UMTX_OP_ERR	1
+
 #endif /* _PTHREAD_MD_H_ */

Added: head/lib/libthr/arch/powerpc/powerpc/_umtx_op_err.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libthr/arch/powerpc/powerpc/_umtx_op_err.S	Fri Aug  9 20:16:38 2019	(r350826)
@@ -0,0 +1,41 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2019 Brandon Bergren <bdragon at FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <machine/asm.h>
+#include <sys/syscall.h>
+
+	.text
+	.align 2
+ENTRY(_umtx_op_err)
+	li	%r0, SYS__umtx_op
+	sc
+	blr
+END(_umtx_op_err)
+
+	.section .note.GNU-stack,"",%progbits


More information about the svn-src-head mailing list