Add convenient pthread wrappers

Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
diff --git a/host/xtest/xtest_helpers.c b/host/xtest/xtest_helpers.c
index 7a91acd..879bf48 100644
--- a/host/xtest/xtest_helpers.c
+++ b/host/xtest/xtest_helpers.c
@@ -11,16 +11,17 @@
  * GNU General Public License for more details.
  */
 
-#include "xtest_helpers.h"
-#include "xtest_test.h"
-
+#include <assert.h>
+#include <err.h>
+#include <malloc.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <string.h>
 #include <ta_crypt.h>
 #include <utee_defines.h>
 
-#include <string.h>
-#include <stdio.h>
-#include <malloc.h>
-#include <assert.h>
+#include "xtest_helpers.h"
+#include "xtest_test.h"
 
 /* Round up the even multiple of size, size has to be a multiple of 2 */
 #define ROUNDUP(v, size) (((v) + (size - 1)) & ~(size - 1))
@@ -408,3 +409,61 @@
 			p_uuid->clockSeqAndNode[6],
 			p_uuid->clockSeqAndNode[7]);
 }
+
+
+void xtest_mutex_init(pthread_mutex_t *mutex)
+{
+	int e = pthread_mutex_init(mutex, NULL);
+
+	if (e)
+		errx(1, "pthread_mutex_init: %s", strerror(e));
+}
+
+void xtest_mutex_destroy(pthread_mutex_t *mutex)
+{
+	int e = pthread_mutex_destroy(mutex);
+
+	if (e)
+		errx(1, "pthread_mutex_destroy: %s", strerror(e));
+}
+
+void xtest_mutex_lock(pthread_mutex_t *mutex)
+{
+	int e = pthread_mutex_lock(mutex);
+
+	if (e)
+		errx(1, "pthread_mutex_lock: %s", strerror(e));
+}
+
+void xtest_mutex_unlock(pthread_mutex_t *mutex)
+{
+	int e = pthread_mutex_unlock(mutex);
+
+	if (e)
+		errx(1, "pthread_mutex_unlock: %s", strerror(e));
+}
+
+void xtest_barrier_init(pthread_barrier_t *barrier, unsigned count)
+{
+	int e = pthread_barrier_init(barrier, NULL, count);
+
+	if (e)
+		errx(1, "pthread_barrier_init: %s", strerror(e));
+}
+
+void xtest_barrier_destroy(pthread_barrier_t *barrier)
+{
+	int e = pthread_barrier_destroy(barrier);
+
+	if (e)
+		errx(1, "pthread_barrier_destroy: %s", strerror(e));
+}
+
+int xtest_barrier_wait(pthread_barrier_t *barrier)
+{
+	int e = pthread_barrier_wait(barrier);
+
+	if (e && e != PTHREAD_BARRIER_SERIAL_THREAD)
+		errx(1, "pthread _barrier_wait: %s", strerror(e));
+	return e;
+}
diff --git a/host/xtest/xtest_helpers.h b/host/xtest/xtest_helpers.h
index 2339db2..66d372c 100644
--- a/host/xtest/xtest_helpers.h
+++ b/host/xtest/xtest_helpers.h
@@ -14,9 +14,10 @@
 #ifndef XTEST_HELPERS_H
 #define XTEST_HELPERS_H
 
-#include <tee_client_api.h>
-#include <tee_api_types.h>
 #include <adbg.h>
+#include <pthread.h>
+#include <tee_api_types.h>
+#include <tee_client_api.h>
 
 extern unsigned int level;
 
@@ -103,4 +104,13 @@
 
 int ree_fs_get_ta_dirname(TEEC_UUID *p_uuid, char *buffer, uint32_t len);
 
+void xtest_mutex_init(pthread_mutex_t *mutex);
+void xtest_mutex_destroy(pthread_mutex_t *mutex);
+void xtest_mutex_lock(pthread_mutex_t *mutex);
+void xtest_mutex_unlock(pthread_mutex_t *mutex);
+
+void xtest_barrier_init(pthread_barrier_t *barrier, unsigned count);
+void xtest_barrier_destroy(pthread_barrier_t *barrier);
+int xtest_barrier_wait(pthread_barrier_t *barrier);
+
 #endif /*XTEST_HELPERS_H*/