sgx_pthread.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #include "platform_api_vmcore.h"
  6. #include "sgx_pthread.h"
  7. #include "sgx_error.h"
  8. #ifndef SGX_DISABLE_WASI
  9. #define TRACE_FUNC() os_printf("undefined %s\n", __FUNCTION__)
  10. #define TRACE_OCALL_FAIL() os_printf("ocall %s failed!\n", __FUNCTION__)
  11. int ocall_pthread_rwlock_init(int *p_ret, void **rwlock, void *attr);
  12. int ocall_pthread_rwlock_destroy(int *p_ret, void **rwlock);
  13. int ocall_pthread_rwlock_rdlock(int *p_ret, void **rwlock);
  14. int ocall_pthread_rwlock_wrlock(int *p_ret, void **rwlock);
  15. int ocall_pthread_rwlock_unlock(int *p_ret, void **rwlock);
  16. int pthread_rwlock_init(pthread_rwlock_t *rwlock, void *attr)
  17. {
  18. int ret = -1;
  19. if (ocall_pthread_rwlock_init(&ret, (void **)rwlock, NULL)
  20. != SGX_SUCCESS) {
  21. TRACE_OCALL_FAIL();
  22. return -1;
  23. }
  24. (void)attr;
  25. return ret;
  26. }
  27. int pthread_rwlock_destroy(pthread_rwlock_t *rwlock)
  28. {
  29. int ret = -1;
  30. if (ocall_pthread_rwlock_destroy(&ret, (void *)*rwlock) != SGX_SUCCESS) {
  31. TRACE_OCALL_FAIL();
  32. }
  33. return ret;
  34. }
  35. int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock)
  36. {
  37. int ret = -1;
  38. if (ocall_pthread_rwlock_rdlock(&ret, (void*)*rwlock) != SGX_SUCCESS) {
  39. TRACE_OCALL_FAIL();
  40. }
  41. return ret;
  42. }
  43. int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock)
  44. {
  45. int ret = -1;
  46. if (ocall_pthread_rwlock_wrlock(&ret, (void*)*rwlock) != SGX_SUCCESS) {
  47. TRACE_OCALL_FAIL();
  48. }
  49. return ret;
  50. }
  51. int pthread_rwlock_unlock(pthread_rwlock_t *rwlock)
  52. {
  53. int ret = -1;
  54. if (ocall_pthread_rwlock_unlock(&ret, (void*)*rwlock) != SGX_SUCCESS) {
  55. TRACE_OCALL_FAIL();
  56. }
  57. return ret;
  58. }
  59. #endif